(Test -n $st) != (Test -z $st), richtig?

(Test -n $st) != (Test -z $st), richtig?

Während ich las,

test -n $string==> Der Beendigungsstatus ist 0, $stringwennnicht null, 1 sonst

Und

test -z $string==> Der Beendigungsstatus ist 0, wenn$string ist Null, 1 sonst

Aber in diesem speziellen Beispiel (ich habe versucht, eine Nullzeichenfolge zu erstellen) scheint mir etwas zu fehlen.

#!/bin/sh
str=""
test -n $str
echo $?
test -z $str
echo $?

Die Ausgabe lautet:

0
0

Bildbeschreibung hier eingeben

Kann jemand eine Erklärung für dieses seltsame Verhalten geben?

Antwort1

$strIn Anführungszeichen setzen !

Der -n-Test erfordert, dass die Zeichenfolge in den Testklammern in Anführungszeichen steht. Die Verwendung einer nicht in Anführungszeichen gesetzten Zeichenfolge mit ! -z oder sogar nur der nicht in Anführungszeichen gesetzten Zeichenfolge in den Testklammern (siehe Beispiel 7-6) funktioniert normalerweise, dies ist jedoch eine unsichere Vorgehensweise. Setzen Sie eine getestete Zeichenfolge immer in Anführungszeichen.Andere Vergleichsoperatoren

verwandte Informationen