I was reading the grep man page and came across the -q option, which tells grep to “not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected.”
I don’t understand why this could be desirable or useful behavior. In a program who’s reason d’etre seems to be read from stdin, process, write to stdout, why would I want to silence it completely?
In what case would silencing a program whose goal it is to output things be useful? Why would someone want to entirely ignore errors and force a successful return code?
Thanks!
Advertisement
Answer
The exit status of grep
doesn’t necessarily indicate an error ; it indicates success or failure. grep
defines success as matching 1 or more lines. Failure includes matching zero lines, or some other error that prevented matching from taking place in the first place.
-q
is used when you don’t care about which lines matched, only that some lines matched.
if grep -q foo file.txt; then echo "file.txt contains foo" else echo "file.txt does not contain foo" fi