
Ich dachte immer, dass -q
bei bedingter Verwendung die Option quiet () verwendet werden muss grep
. Aber beim erneuten Lesen der man
Seite scheint es, als ob es auch ohne funktionieren sollte.
Wenn Sie also Übereinstimmungen drucken und in einer Bedingung verwenden möchten, können Sie einfach etwas tun wie
grep PATTERN FILE && do_something_else
Das Einzige, was mich verunsichert, ist der scheinbar leichte Unterschied im Exit-Status.
Mit -q
,
- grep wird "sofort mit dem Status Null beendet, wenn eine Übereinstimmung gefunden wird,auch wenn ein Fehler erkannt wurde".
Ohne-q
- „Der Beendigungsstatus ist 0, wenn die ausgewählten Zeilen gefunden wurden, und 1, wenn sie nicht gefunden wurden. Wenn ein Fehler aufgetreten ist, ist der Beendigungsstatus 2".
Mir fällt aber kein Beispiel ein, bei dem der Unterschied spürbar würde?
Antwort1
Hier ist ein Beispiel:
$ 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
Wir haben also eine Datei namens , file
die die Zeichenfolge enthält foo
. Als ich sie grep
mit -q
on ausführte file
und das nicht vorhandene Ergebnis erhielt wrongfile
, wurde sie trotz des Fehlers „Keine solche Datei“ mit dem Status beendet file
, da sie eine Übereinstimmung enthielt.grep
0