Si noti che [] && cmdnon è lo stesso della if .. ficostruzione.
A volte il suo comportamento è abbastanza simile e puoi usarlo al [] && cmdposto di if .. fi. Ma solo a volte. Se hai più di un comando da eseguire se la condizione o hai bisogno di if .. else .. fistare 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 lsfallirà, echoverrà 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 ifscegliere guardando il tuo compito e il comportamento previsto.
[ … ]vs[[ … ]]vstest …, ci sono risposte più complete in questa domanda per lo più duplicata .