Bash - команда grep не соответствует странице man
Я пытаюсь понять и прочитать справочную страницу. Тем не менее, каждый день я нахожу все более непоследовательный синтаксис и хотел бы уточнить, не понимаю ли я что-то неправильно.
На странице руководства он определяет синтаксис для grep
является grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]
Я получил рабочий пример, который рекурсивно ищет во всех файлах в каталоге ключевое слово.
grep -rnw . -e 'memes
Сейчас этот пример работает, но я считаю его очень несовместимым со страницей руководства. Каталог (который страница руководства написала как [FILE...]
но указывает вариант использования, если директория file == на странице man) находится последней. Тем не менее в этом примере он расположен после [OPTIONS]
и раньше [-e PATTERN]...
, Почему это разрешено, это не следует заданному правилу регулярных выражений при использовании этой команды?
2 ответа
Почему это разрешено, это не следует заданному правилу регулярных выражений при использовании этой команды?
Линии в SYNOPSIS
Раздел man-страницы следует понимать не как строгие регулярные выражения, а как краткое описание синтаксиса аргументов утилиты.
В зависимости от конкретного приложения анализатор может быть более или менее гибким в отношении того, как он принимает свои параметры. В конце концов, каждая программа может реализовать любую грамматику для своих аргументов. Поэтому некоторые могут разрешить варианты в начале, в конце или даже между файлами (как правило, с способами обработки неоднозначности, которая может возникнуть, например, чтение из стандартного ввода с -
, имена файлов начинаются с -
...).
Теперь, конечно, есть несколько способов сделать это, которые являются общими. Например, синтаксис служебного аргумента POSIX.1-2017 12.1 гласит:
В этом разделе описывается синтаксис аргументов стандартных утилит и вводится терминология, используемая в POSIX.1-2017 для описания аргументов, обрабатываемых утилитами.
В вашем конкретном случае ваша реализация grep
(вероятно, GNU grep
) позволяет передавать параметры между списком файлов, как вы обнаружили.
Для получения дополнительной информации см.: