Und es ist numerische Ungleichung; !=ist String-Ungleichung.
Keith Thompson
6
Es bedeutet nichts "in Bash". [führt einen Befehl namens aus test. -neist ein Argument für den testBefehl, nicht für bash, und Sie finden seine Dokumentation in man test.
Charles Duffy
2
Das ist übrigens fehlerhaft, weil Sie keine Anführungszeichen verwenden. Es muss [ "$RESULT" -ne 0 ]minimal sein - oder viel besser (( RESULT != 0 )). (Besser als das - wenn Sie dies erhalten $?, können Sie einfach nach dem Exit-Status des Befehls verzweigen, den Sie direkt ausführen, anstatt ihn auszuführen, seinen Exit-Status in eine Variable zu erfassen und dann den Wert dieser Variablen zu ersetzen in einen testBefehl).
Charles Duffy
Antworten:
98
Dies ist eines der Dinge, nach denen es schwierig sein kann, zu suchen, wenn Sie noch nicht wissen, wo Sie suchen müssen.
[ist eigentlich ein Befehl, der nicht wie erwartet Teil der Bash-Shell-Syntax ist. Es handelt sich zufällig um einen in Bash integrierten Befehl, der im Bash-Handbuch dokumentiert ist.
Es gibt auch einen externen Befehl, der dasselbe tut. Auf vielen Systemen wird es vom GNU Coreutils-Paket bereitgestellt.
[ist äquivalent zum testBefehl, außer dass dies als letztes Argument [erforderlich ]ist und testnicht.
Angenommen, die Bash-Dokumentation ist auf Ihrem System installiert. Wenn Sie oder eingeben oder info bashsuchen (die Apostrophe sind Teil der Suche), finden Sie die Dokumentation für den Befehl, auch als Befehl bezeichnet. Wenn Sie anstelle von verwenden , suchen Sie nach (dem Wort am Zeilenanfang nach einer bestimmten Anzahl von Leerzeichen).'test''['[testman bashinfo bash^ *testtest
Wenn Sie dem Verweis auf "Bedingte Bash-Ausdrücke" folgen, gelangen Sie zu der Beschreibung von -ne, bei der es sich um den numerischen Ungleichungsoperator handelt ("ne" steht für "ungleich"). Im Gegensatz dazu !=handelt es sich um den Zeichenfolgenungleichheitsoperator .
Sie finden die Bash-Dokumentation auch im Internet.
Die offizielle Definition des testBefehls ist der POSIX-Standard (dem die Bash-Implementierung einigermaßen gut entsprechen sollte, möglicherweise mit einigen Erweiterungen).
$RESULT
"nicht gleich" ist0
!=
ist String-Ungleichung.[
führt einen Befehl namens austest
.-ne
ist ein Argument für dentest
Befehl, nicht für bash, und Sie finden seine Dokumentation inman test
.[ "$RESULT" -ne 0 ]
minimal sein - oder viel besser(( RESULT != 0 ))
. (Besser als das - wenn Sie dies erhalten$?
, können Sie einfach nach dem Exit-Status des Befehls verzweigen, den Sie direkt ausführen, anstatt ihn auszuführen, seinen Exit-Status in eine Variable zu erfassen und dann den Wert dieser Variablen zu ersetzen in einentest
Befehl).Antworten:
Dies ist eines der Dinge, nach denen es schwierig sein kann, zu suchen, wenn Sie noch nicht wissen, wo Sie suchen müssen.
[
ist eigentlich ein Befehl, der nicht wie erwartet Teil der Bash-Shell-Syntax ist. Es handelt sich zufällig um einen in Bash integrierten Befehl, der im Bash-Handbuch dokumentiert ist.Es gibt auch einen externen Befehl, der dasselbe tut. Auf vielen Systemen wird es vom GNU Coreutils-Paket bereitgestellt.
[
ist äquivalent zumtest
Befehl, außer dass dies als letztes Argument[
erforderlich]
ist undtest
nicht.Angenommen, die Bash-Dokumentation ist auf Ihrem System installiert. Wenn Sie oder eingeben oder
info bash
suchen (die Apostrophe sind Teil der Suche), finden Sie die Dokumentation für den Befehl, auch als Befehl bezeichnet. Wenn Sie anstelle von verwenden , suchen Sie nach (dem Wort am Zeilenanfang nach einer bestimmten Anzahl von Leerzeichen).'test'
'['
[
test
man bash
info bash
^ *test
test
Wenn Sie dem Verweis auf "Bedingte Bash-Ausdrücke" folgen, gelangen Sie zu der Beschreibung von
-ne
, bei der es sich um den numerischen Ungleichungsoperator handelt ("ne" steht für "ungleich"). Im Gegensatz dazu!=
handelt es sich um den Zeichenfolgenungleichheitsoperator .Sie finden die Bash-Dokumentation auch im Internet.
test
und[
)-ne
befindet sich unter " arg1 OP arg2 ")test
Die offizielle Definition des
test
Befehls ist der POSIX-Standard (dem die Bash-Implementierung einigermaßen gut entsprechen sollte, möglicherweise mit einigen Erweiterungen).quelle
test
ist schließlich ein POSIX-Befehl."ungleich" Wird also in diesem Fall
$RESULT
getestet, um ungleich Null zu sein.Der Test wird jedoch numerisch und nicht alphabetisch durchgeführt:
n1 -ne n2 True if the integers n1 and n2 are not algebraically equal.
verglichen mit:
s1 != s2 True if the strings s1 and s2 are not identical.
quelle