Что означает «-» (двойная тире)? (также известный как «двойной двойной тире»)
Я видел --
, который используется в команде compgen
.
Например:
compgen -W "foo bar baz" -- b
В чем смысл --
?
4 ответа
Точнее, двойная тире (--
) используется в встроенных командах bash и многих других командах, чтобы обозначать конец параметров команды, после чего принимаются только позиционные параметры.
Пример использования: позволяет говорить, что вы хотите grep-файл для строки -v
- обычно -v
будет считаться опцией для изменения соответствующего значения (только показать строки, которые не совпадают), но с помощью --
вы можете grep для строки -v
следующим образом:
grep -- -v file
Это знак окончания списка параметров (опция).
В man bash
мы можем прочитать раздел Shell Builtin Commands :
Если не указано иное, каждая встроенная команда, документально зафиксированная в этом разделе, принимает параметры, которым предшествует
-
, принимает--
, чтобы обозначить конец опций .Встроенные функции
:
,true
,false
иtest
не принимают параметры и не обрабатывают -.--
,exit
,logout
,break
,continue
иlet
принимают и обрабатывают аргументы, начинающиеся сshift
, не требуя-
. Другие встроенные элементы, которые принимают аргументы, но не указываются как принимающие опции, интерпретируют аргументы, начинающиеся с--
, как недопустимые параметры и требуют-
, чтобы предотвратить эту интерпретацию.Обратите внимание, что
--
не интерпретируетecho
как конец опций.
POSIX.1-2017
12.2 Рекомендации по синтаксису служебных программ
Руководящий принцип 10:
Первый аргумент - , который не является аргументом option, должен быть принятый в качестве разделителя, указывающий конец опций. Любые последующие аргументы следует рассматривать как операнды, даже если они начинаются с '-'.
http://pubs.opengroup.org/onlinepubs/9699919799 /basedefs/V1_chap12.html#tag_12_02