Sieht so aus, als ob Ihre depth
Variable nicht gesetzt ist. Dies bedeutet, dass der Ausdruck [ $depth -eq $zero ]
zu [ -eq 0 ]
wird, nachdem bash die Werte der Variablen in den Ausdruck ersetzt. Das Problem hierbei ist, dass der Operator -eq
fälschlicherweise als Operator mit nur einem Argument (der Null) verwendet wird, jedoch zwei Argumente benötigt. Deshalb erhalten Sie den unären Operator Fehlermeldung.
EDIT: Als Doktor J in seinem Kommentar zu dieser Antwort erwähnt, ist eine sichere Möglichkeit, Probleme mit nicht definierter Variablen in Kontrollen zu vermeiden, ist die Variablen in ""
einzuschließen. Siehe seinen Kommentar für die Erklärung.
if [ "$depth" -eq "0" ]; then
echo "false";
exit;
fi
Eine ungesetzt Variable mit dem [
Befehl erscheint leer einzuschlagen. Sie können dies mit Hilfe der folgenden Tests überprüfen, die sich alle auf true
bewerten, weil xyz
entweder leer oder nicht gesetzt ist:
if [ -z ] ; then echo "true"; else echo "false"; fi
xyz=""; if [ -z "$xyz" ] ; then echo "true"; else echo "false"; fi
unset xyz; if [ -z "$xyz" ] ; then echo "true"; else echo "false"; fi
Ich erhalte Tiefe als Ergebnis von einem anderen Programm verwendet werden. Ich habe versucht, es zu wiederholen und es gab nichts in der Ausgabe. Wenn ich jedoch [[]] als @Jacek Dominiak vorgeschlagen habe, funktioniert das Skript korrekt (was ziemlich merkwürdig ist, wenn die Variable wirklich nicht gesetzt ist). Ich muss zugeben, dass ich nicht wirklich verstehe, was hier passiert ... – Perlnika
Ihre Tiefenvariable ist nicht gesetzt. Das bedeutet, bash sieht einen Ausdruck, der besagt: [-eq 0]; dann ", was keinen Sinn ergibt. '[[]]' ist die sicherere Version, die bash anscheinend als [[null -eq 0]] erscheinen lässt, was korrekt ist. – cyon
Ein sicherer Weg zu überprüfen ist, beide Seiten in Anführungszeichen zu setzen, d. H. 'If [" $ depth "-eq" 0 "]'; Auf diese Weise wird eine nicht gesetzte Variable ('$ depth') zu" "ausgewertet (was natürlich nicht gleich Null ist) –