Je m'excuse à l'avance s'il s'agit d'une question en double. J'ai fait un effort pour rechercher / vérifier avant de demander ici.
Je suis à l'aise avec l'écriture de lignes simples comme ceci:
foocommand && foocommand2 && foocommand3
L'idée étant que je souhaite que les commandes suivantes s'exécutent uniquement si la précédente a "réussi".
J'écris un script un peu long et ce one-liner n'est pas réalisable car il ressemble à un énorme bloc de code déroutant pour tout le monde.
Je veux espacer les commandes et écrire des commentaires entre elles dans le script. Comment puis-je faire cela et avoir encore l'équivalent de && là-dedans?
||
et &&
(par opposition à |
ou &
) est appelé court-circuit. Le comportement utilisé avec ces derniers opérateurs est appelé évaluation avide.
a && b && c
ne s'exécutera que b
si a
réussit, donc "il ne s'exécute que c
si b
réussit" et "il ne s'exécute que c
si a
et les b
deux réussissent" sont des instructions équivalentes: b
ne peut réussir que s'il a
réussit.
a || b && c
est plus illustratif.
true || false && echo hi
sortira hi
. La spécification se lit comme suit: Les opérateurs "&&" et "||" doivent avoir la même priorité et doivent être évalués avec l'associativité gauche.
&&
ne signifie pas que la commande suivante fonctionnera si le précédent un a réussi. Cela signifie que la commande s'exécutera si le résultat collectif de toutes les commandes précédentes dans la liste de commandes est réussi. Vous le savez peut-être, mais les futurs lecteurs peuvent se méprendre.