Условный grep без опции quiet

Условный grep без опции quiet

Я всегда думал, что опция quiet ( -q) должна использоваться при использовании grepconditionally. Но перечитав страницу, manкажется, что должно работать и без нее.

Итак, если вы хотите вывести совпадения и использовать их в условном выражении, можете ли вы просто сделать что-то вроде

grep PATTERN FILE && do_something_else

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

С -q,

  • grep «немедленно завершит работу с нулевым статусом, если будет найдено хоть одно совпадение,даже если была обнаружена ошибка".

Без-q

  • «Статус выхода — 0, если выбранные строки найдены, и 1, если не найдены. Если произошла ошибка, статус выхода — 2.".

Но я не могу вспомнить пример, когда разница станет заметной?

решение1

Вот пример:

$ echo "foo" > file
$ grep foo file wrongfile; echo "Exit status: $?"
file:foo
grep: wrongfile: No such file or directory
Exit status: 2
$ grep -q foo file wrongfile;  echo "Exit status: $?"
Exit status: 0

Итак, у нас есть файл с именем file, содержащий строку foo. Когда я запустил grepс -qon fileи несуществующий wrongfile, так как fileсодержал совпадение, grepвышел со 0статусом, несмотря на ошибку «Нет такого файла».

Связанный контент