Gemäß man grep
Seite, -c
Flag ist für
-c, --countNormale Ausgabe unterdrücken; geben Sie stattdessen eine Anzahl übereinstimmender Zeilen für jede Eingabedatei aus.
Was Sie also sehen, ist die Anzahl der Übereinstimmungen und nicht zu verwechseln mit dem Exit-Code von grep
passen. Der Code 1
liegt daran, dass keine Zeilen mit der Eingabe übereinstimmen.
Sehen Sie sich den anderen Fall an,
echo 'No' | grep -c No
1
echo $?
0
Auch zu lesen auf EXIT CODES
auf man grep
Seite,
EXIT STATUSNormalerweise ist der Exit-Status 0, wenn eine Zeile ausgewählt ist, 1, wenn keine Zeilen ausgewählt wurden, und 2, wenn ein Fehler aufgetreten ist.
Der Exit-Code ist 1, weil grep nichts gefunden hat.
EXIT-STATUSDer Exit-Status ist 0, wenn ausgewählte Zeilen gefunden werden, und 1, wenn sie nicht gefunden werden. Wenn ein Fehler aufgetreten ist, ist der Exit-Status 2. (Hinweis:Der POSIX-Fehlerbehandlungscode sollte auf '2' oder höher prüfen.)
Die Ausgabe ist null, weil die Zählung von 'Gesamt' null ist. Dies liegt an der Option -c:
-c, --countNormale Ausgabe unterdrücken; geben Sie stattdessen eine Anzahl übereinstimmender Zeilen für jede Eingabedatei aus. Zählen Sie mit der Option -v, --invert-match (siehe unten) nicht übereinstimmende Zeilen. (-c wird von POSIX angegeben.)
Wenn Sie einen Exit-Code von 0 erzwingen möchten, können Sie einfach || true
anhängen zu Ihrem Befehl:
echo 'Total' | grep -c No || true