2016-03-25 11 views
1
(echo "123" | grep "xyz" > /dev/null) && echo $ 
(echo "123" | grep "123" > /dev/null) && echo $? 
  1. Command1 hat keine Ausgabe.
  2. Command2-Ausgabe '0'.

Siehe die Hilfe von Grep.verlass Wert von grep

EXIT STATUS Die grep Dienstprogramm Ausfahrten mit einem der folgenden Werte:

0  One or more lines were selected. 
1  No lines were selected. 
>1 An error occurred. 

Ich fühle mich verwirrt über "expression1 & & expression2". Wenn Ausdruck1 wahr ist, wird Ausdruck2 ausgeführt. Ist das richtig?

Wenn grep mit "123" übereinstimmt, gibt es null (0 gleich falsch) zurück. Wenn Null zurückgegeben wird, wird ausdruck1 falsch sein. Warum wurde echo $? ausgeführt, wenn ausdruck1 falsch ist?

Antwort

1

Ihre Annahme, dass 0 gleich false ist, ist nicht korrekt. Es ist das Gegenteil. 0 bedeutet, dass ein Befehl erfolgreich ausgeführt wurde, genauso wie die Hilfe für grep sagt. Daher gilt jeder Nicht-Null-Beendigungsstatus als Fehler, daher false. Dies ist auch der Fall für den Befehl test, der häufig in if Anweisungen verwendet wird.

In diesem Sinne ist das Ergebnis dieses Skripts wie erwartet.