Страницы

Поиск по вопросам

понедельник, 18 февраля 2019 г.

Синтаксис аргумента `--` программы grep

$ nginx -V 2>&1 | grep -- '--with-debug'
Не совсем понятно что означает такой синтаксис команды grep. А именно первые два тире --. Может опечатка?

Кажется врубился, это хак чтобы защитить шаблон начинающийся на -. Вот нормальная человеческая версия:
$ nginx -V 2>&1 | grep -e '--with-debug'


Ответ

это синтаксическая конструкция, описанная в стандарте posix для всех программ, следующих этому стандарту (а не только для конкретной программы grep):
Guideline 10 The first -- argument that is not an option-argument should be accepted as a delimiter indicating the end of options. Any following arguments should be treated as operands, even if they begin with the '-' character.
мой вольный перевод:
первый аргумент --, не являющийся аргументом-опцией (т.е., насколько я понимаю, частью синтаксиса опции: -опция аргумент-этой-опции), должен быть воспринят как разделитель, обозначающий конец списка опций. любой последующий аргумент следует рассматривать как операнд, даже если он начинается с символа '-'

в вашем примере -- используется для того, чтобы программа grep не пыталась интерпретировать строку '--with-debug' как опцию, а считала её аргументом, т.е., в данном случае, регулярным выражением для поиска.

кстати: два аргумента -e --with-debug будут восприняты программой grep абсолютно точно так же, потому что опция -e подразумевает наличие следующего аргумента — регулярного выражения

Комментариев нет:

Отправить комментарий