Bedingtes Grep ohne ruhige Option

Bedingtes Grep ohne ruhige Option

Ich dachte immer, dass -qbei bedingter Verwendung die Option quiet () verwendet werden muss grep. Aber beim erneuten Lesen der manSeite 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 , filedie die Zeichenfolge enthält foo. Als ich sie grepmit -qon ausführte fileund das nicht vorhandene Ergebnis erhielt wrongfile, wurde sie trotz des Fehlers „Keine solche Datei“ mit dem Status beendet file, da sie eine Übereinstimmung enthielt.grep0

verwandte Informationen