%20%D0%B2%20%D1%8D%D1%82%D0%BE%D0%B9%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%B5%20%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B8%3F.png)
У меня есть эта команда оболочки:
kill `cat -- $PIDFILE`
Что делает здесь двойной --? Почему бы не использовать просто
kill `cat $PIDFILE`
решение1
Он --
говорит 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
решение2
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/что-означает-двойное-тире-также-известное-как-голое-двойное-тире