Что означает «-» (двойная черта)? (также известный как «голый двойной тире»)

Ответы:

583

Точнее, двойная черта ( --) используется во встроенных командах bash и во многих других командах для обозначения параметров конца команды, после чего принимаются только позиционные параметры.

Пример использования: допустим, вы хотите выполнить поиск файла для строки grep -v- обычно -vэто будет вариант перевернуть совпадающее значение (показывать только строки, которые не совпадают), но --вы можете использовать grep для строки -vследующим образом:

grep -- -v file
Guss
источник
3
В частности, во setвстроенном Bash , где это абсолютно необходимо.
10
10
--работает, чтобы отделить опции от регулярных выражений в grep, но каноническим способом является использование -e/ --regexp.
10
5
@ l0b0: шаблон для поиска обычно является одним из позиционных параметров, поэтому он может соответствовать после --, хотя вы правы, отметив, что мой пример выше также может быть записан как grep -e -v file(хотя это очень запутанно).
Гусс
2
Не все bashвстроенные команды принимают --в качестве маркера конца опции. [и echoне например ( одна из причин echoне может быть использована надежно ).
Стефан Шазелас
44

Это отмечает конец списка параметров (опций).

Полемон
источник
39

В разделе Команды Shell Builtinman bash мы можем прочитать :

Если не указано иное, каждая встроенная команда, задокументированная в этом разделе как принимающая параметры, которым предшествует, -принимает -- для обозначения конца параметров .

В :, true, falseи testвстроенные команды не принимают варианты и не относятся к --специально. exit, logout, break, continue, let, И shiftвстроенные функции принимают и аргументы процесса , начиная с -без необходимости --. Другие встроенные функции, которые принимают аргументы, но не указаны как принимающие параметры, интерпретируют аргументы, начинающиеся с -недопустимых параметров, и требуют --предотвращения этой интерпретации.

Обратите внимание, что echoэто не --означает конец опций.

kenorb
источник
2
+1 для ссылки man bash(примечание к себе в следующий раз:).
user3773048
11

POSIX.1-2017

12.2 Рекомендации по синтаксису служебных программ

Руководящий принцип 10:

Первый --аргумент, который не является аргументом-параметром, должен быть принят в качестве разделителя, указывающего конец параметров. Любые последующие аргументы должны рассматриваться как операнды, даже если они начинаются с -символа ' '.

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02

Джон Доу
источник