S'il vous plaît noter que ce [] && cmd
n'est pas la même chose que la if .. fi
construction.
Parfois, son comportement est assez similaire et vous pouvez utiliser [] && cmd
au lieu de if .. fi
. Mais seulement parfois. Si vous avez plus d'une commande à exécuter si condition ou si vous devez if .. else .. fi
être prudent et effacer la logique.
Quelques exemples:
[ -z "$VAR" ] && ls file || echo wiiii
N'est-ce pas la même chose que
if [ -z $VAR ] ; then
ls file
else
echo wiii
fi
car si ls
échouera, echo
sera exécuté ce qui ne se produira pas avec if
.
Un autre exemple:
[ -z "$VAR" ] && ls file && echo wiii
n'est pas la même chose que
if [ -z "$VAR" ] ; then
ls file
echo $wiii
fi
bien que cette construction agisse de la même manière
[ -z "$VAR" ] && { ls file ; echo wiii ; }
s'il vous plaît noter ;
après l'écho est important et doit être là.
Donc, reprenant la déclaration ci-dessus, nous pouvons dire
[] && cmd
== si la première commande réussit, exécute la suivante
if .. fi
== si condition (qui peut également être la commande test), puis exécuter la ou les commandes
Donc, pour la portabilité entre [
et [[
utiliser [
seulement.
if
est compatible POSIX. Donc, si vous devez choisir entre [
et if
choisissez de regarder votre tâche et votre comportement attendu.
[ … ]
vs[[ … ]]
vstest …
, il y a des réponses plus complètes dans cette question principalement en double .