
Я всегда думал, что опция quiet ( -q
) должна использоваться при использовании grep
conditionally. Но перечитав страницу, 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
с -q
on file
и несуществующий wrongfile
, так как file
содержал совпадение, grep
вышел со 0
статусом, несмотря на ошибку «Нет такого файла».