Що означає "-" (подвійний тире) у цій командній оболонці?


14

У мене є така команда оболонки:

kill `cat -- $PIDFILE`

Що двійник - робить тут? Чому б не використовувати просто

kill `cat $PIDFILE`

Відповіді:


21

--Каже 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

3
Варто зазначити, що така поведінка (хоча дуже поширена) визначається програмою прийому (тобто cat), а не оболонкою.
dmckee --- кошеня колишнього модератора,

Чи є будь-яка документація чи підручник із написання власного сценарію оболонки, який розуміє, що --означає закінчення параметрів командного рядка? Я бачив таких з геттоптами та іншими методами, але нічого не обговорював --.
CMCDragonkai

3
@CMCDragonkai Вам не потрібно дивитись далі на getopt(1)сторінку " man" : "Кожен параметр після параметра" - "завжди інтерпретується як параметр, який не є опцією".
Mikael Auno

1

POSIX.1-2017

POSIX також визначає його за адресою: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

12.2 Настанови щодо синтаксису утиліти

Керівництво 10:

Перший - аргумент, який не є параметром-опціоном, слід сприймати як роздільник, що вказує кінець параметрів. Будь-які наступні аргументи слід розглядати як операнди, навіть якщо вони починаються із символу '-'.

Дивіться також: /unix/11376/what-does-double-dash-mean-also-known-as-bare-double-dash

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.