Respuestas:
El --le dice que catno intente analizar lo que viene después como opciones de línea de comando.
Como ejemplo, piense en lo que sucedería en los dos casos si la variable $PIDFILEse definiera como PIDFILE="--version". En mi máquina, dan los siguientes resultados:
$ cat $PIDFILE
cat (GNU coreutils) 6.10
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Torbjorn Granlund and Richard M. Stallman.
$ cat -- $PIDFILE
cat: --version: No such file or directory
--significa el final de las opciones de línea de comandos? He visto algunos con getopts y otras técnicas, pero nada de discusión --.
getopt(1)página del manual : "Cada parámetro después de un parámetro '-' siempre se interpreta como un parámetro sin opción".
POSIX.1-2017
POSIX también lo especifica en: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02
12.2 Pautas de sintaxis de utilidad
Directriz 10:
La primera - argumento de que no es una opción-argumento debe ser aceptado como un delimitador que indica el final de las opciones. Los siguientes argumentos deben tratarse como operandos, incluso si comienzan con el carácter '-'.
Ver también: /unix/11376/what-does-double-dash-mean-also-known-as-bare-double-dash
cat) y no por el shell.