Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have this shell command:

kill `cat -- $PIDFILE`

What the double -- does here? Why not use just

kill `cat $PIDFILE`
share|improve this question
up vote 18 down vote accepted

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 <>
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
share|improve this answer
It is worth noting that this behavior (while very common) is defined by the receiving program (i.e. cat) and not by the shell. – dmckee Feb 21 '10 at 2:33
@dmckee Very true, thanks. – Mikael Auno Feb 21 '10 at 12:14
Is there any documentation or tutorial on writing your own shell script that understands that -- means the end of command line options? I've seen ones with getopts and other techniques, but nothing discussing --. – CMCDragonkai Aug 25 '15 at 8:08
@CMCDragonkai You need not look any further than the getopt(1) man page: "Each parameter after a '--' parameter is always interpreted as a non-option parameter". – Mikael Auno Aug 25 '15 at 10:29

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.