S'il vous plaît noter que ce [] && cmdn'est pas la même chose que la if .. ficonstruction.
Parfois, son comportement est assez similaire et vous pouvez utiliser [] && cmdau 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, echosera 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.
ifest compatible POSIX. Donc, si vous devez choisir entre [et ifchoisissez 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 .