У меня есть эта команда оболочки:
kill `cat -- $PIDFILE`
Что делает здесь двойник? Почему бы не использовать просто
kill `cat $PIDFILE`
В --
говорит cat
не пытаться разбирать то, что идет после него, как параметры командной строки.
В качестве примера подумайте, что произойдет в двух случаях, если переменная $PIDFILE
был определен как PIDFILE="--version"
. На моей машине они дают следующие результаты:
$ 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
POSIX.1-2017
POSIX также указывает его по адресу: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02
12.2 Рекомендации по синтаксису служебных программ
Рекомендация 10:
Первый - Аргумент, который не является аргументом-параметром, должен быть принят как разделитель, указывающий конец параметров. Любые следующие аргументы следует рассматривать как операнды, даже если они начинаются с символа «-».
Смотрите также: https://unix.stackexchange.com/questions/11376/what-does-double-dash-mean-also-known-as-bare-double-dash