Ответы:
Точнее, двойная черта ( --
) используется во встроенных командах bash и во многих других командах для обозначения параметров конца команды, после чего принимаются только позиционные параметры.
Пример использования: допустим, вы хотите выполнить поиск файла для строки grep -v
- обычно -v
это будет вариант перевернуть совпадающее значение (показывать только строки, которые не совпадают), но --
вы можете использовать grep для строки -v
следующим образом:
grep -- -v file
--
работает, чтобы отделить опции от регулярных выражений в grep
, но каноническим способом является использование -e
/ --regexp
.
--
, хотя вы правы, отметив, что мой пример выше также может быть записан как grep -e -v file
(хотя это очень запутанно).
bash
встроенные команды принимают --
в качестве маркера конца опции. [
и echo
не например ( одна из причин echo
не может быть использована надежно ).
В разделе Команды Shell Builtinman bash
мы можем прочитать :
Если не указано иное, каждая встроенная команда, задокументированная в этом разделе как принимающая параметры, которым предшествует,
-
принимает--
для обозначения конца параметров .В
:
,true
,false
иtest
встроенные команды не принимают варианты и не относятся к--
специально.exit
,logout
,break
,continue
,let
, Иshift
встроенные функции принимают и аргументы процесса , начиная с-
без необходимости--
. Другие встроенные функции, которые принимают аргументы, но не указаны как принимающие параметры, интерпретируют аргументы, начинающиеся с-
недопустимых параметров, и требуют--
предотвращения этой интерпретации.Обратите внимание, что
echo
это не--
означает конец опций.
man bash
(примечание к себе в следующий раз:).
POSIX.1-2017
12.2 Рекомендации по синтаксису служебных программ
Руководящий принцип 10:
Первый
--
аргумент, который не является аргументом-параметром, должен быть принят в качестве разделителя, указывающего конец параметров. Любые последующие аргументы должны рассматриваться как операнды, даже если они начинаются с-
символа ' '.
http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02
set
встроенном Bash , где это абсолютно необходимо.