it-swarm-ru.tech

Что означает "-" (двойная черта)?

Я видел -- используется в команде compgen.

Например:

compgen -W "foo bar baz" -- b

В чем смысл -- там?

518
dogbane

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

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

grep -- -v file
631
Guss

В man bash Мы можем прочитать раздел Команды встроенной оболочки :

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

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

Обратите внимание, что echo не интерпретирует -- Как конец параметров.

48
kenorb

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

47
polemon

POSIX.1-2017

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

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

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

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

18
John Doe