Si noti che [] && cmd
non è lo stesso della if .. fi
costruzione.
A volte il suo comportamento è abbastanza simile e puoi usarlo al [] && cmd
posto di if .. fi
. Ma solo a volte. Se hai più di un comando da eseguire se la condizione o hai bisogno di if .. else .. fi
stare attento e supplica la logica.
Un paio di esempi:
[ -z "$VAR" ] && ls file || echo wiiii
Non è lo stesso di
if [ -z $VAR ] ; then
ls file
else
echo wiii
fi
perché se ls
fallirà, echo
verrà eseguito che non accadrà if
.
Un altro esempio:
[ -z "$VAR" ] && ls file && echo wiii
non è lo stesso di
if [ -z "$VAR" ] ; then
ls file
echo $wiii
fi
sebbene questa costruzione agirà allo stesso modo
[ -z "$VAR" ] && { ls file ; echo wiii ; }
si prega di notare che ;
dopo l'eco è importante e deve essere lì.
Quindi, riprendendo la frase sopra possiamo dire
[] && cmd
== se il primo comando ha esito positivo, eseguire il successivo
if .. fi
== if condition (che potrebbe anche essere il comando test) quindi eseguire i comandi
Quindi solo per portabilità [
e [[
uso [
.
if
è compatibile POSIX. Quindi, se devi scegliere tra [
e if
scegliere guardando il tuo compito e il comportamento previsto.
[ … ]
vs[[ … ]]
vstest …
, ci sono risposte più complete in questa domanda per lo più duplicata .