I have this shell command:
kill `cat -- $PIDFILE`
What the double -- does here? Why not use just
kill `cat $PIDFILE`
The --
tells cat
not to try to parse what comes after it as command line options.
As an example, think of what would happen in the two cases if the variable $PIDFILE
was defined as PIDFILE="--version"
. On my machine, they give the following results:
$ 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
cat
) and not by the shell.
Feb 21, 2010 at 2:33
--
means the end of command line options? I've seen ones with getopts and other techniques, but nothing discussing --
.
Aug 25, 2015 at 8:08
getopt(1)
man page: "Each parameter after a '--' parameter is always interpreted as a non-option parameter".
Aug 25, 2015 at 10:29
POSIX.1-2017
POSIX also specifies it at: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02
12.2 Utility Syntax Guidelines
Guideline 10:
The first -- argument that is not an option-argument should be accepted as a delimiter indicating the end of options. Any following arguments should be treated as operands, even if they begin with the '-' character.