Ответы:
Точнее, двойная черта ( --) используется во встроенных командах 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 , где это абсолютно необходимо.