Что означает «--» (двойной дефис) в этой команде оболочки?

Что означает «--» (двойной дефис) в этой команде оболочки?

У меня есть эта команда оболочки:

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/что-означает-двойное-тире-также-известное-как-голое-двойное-тире

Связанный контент