Bitte beachten Sie, dass dies [] && cmd
nicht mit der if .. fi
Konstruktion identisch ist .
Manchmal ist sein Verhalten ziemlich ähnlich und Sie können [] && cmd
stattdessen verwenden if .. fi
. Aber nur manchmal. Wenn Sie mehr als einen Befehl zur Ausführung haben, müssen Sie if .. else .. fi
vorsichtig sein und die Logik überprüfen.
Einige Beispiele:
[ -z "$VAR" ] && ls file || echo wiiii
Ist nicht dasselbe wie
if [ -z $VAR ] ; then
ls file
else
echo wiii
fi
Denn wenn dies ls
fehlschlägt, echo
wird ausgeführt, was mit nicht passieren wird if
.
Ein anderes Beispiel:
[ -z "$VAR" ] && ls file && echo wiii
ist nicht dasselbe wie
if [ -z "$VAR" ] ; then
ls file
echo $wiii
fi
obwohl diese Konstruktion gleich wirkt
[ -z "$VAR" ] && { ls file ; echo wiii ; }
Bitte beachten Sie, ;
nachdem Echo wichtig ist und da sein muss.
Die obige wiederaufgenommene Aussage können wir also sagen
[] && cmd
== Wenn der erste Befehl erfolgreich ist, führen Sie den nächsten aus
if .. fi
== Wenn Bedingung (die auch der Testbefehl sein kann), dann Befehl (e) ausführen
Also für die Portabilität zwischen [
und [[
verwenden [
nur.
if
ist POSIX-kompatibel. Also , wenn Sie wählen zwischen [
und if
wählen bei Ihrer Aufgabe und erwartetes Verhalten suchen.
[ … ]
vs[[ … ]]
vstest …
gibt es vollständigere Antworten in dieser meist doppelten Frage .