Bitte beachten Sie, dass dies [] && cmdnicht mit der if .. fiKonstruktion identisch ist .
Manchmal ist sein Verhalten ziemlich ähnlich und Sie können [] && cmdstattdessen verwenden if .. fi. Aber nur manchmal. Wenn Sie mehr als einen Befehl zur Ausführung haben, müssen Sie if .. else .. fivorsichtig 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 lsfehlschlägt, echowird 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.
ifist POSIX-kompatibel. Also , wenn Sie wählen zwischen [und ifwählen bei Ihrer Aufgabe und erwartetes Verhalten suchen.
[ … ]vs[[ … ]]vstest …gibt es vollständigere Antworten in dieser meist doppelten Frage .