web-dev-qa-db-fra.com

Quelle est la différence entre double-esperluette (&&) et point-virgule (;) dans Linux Bash?

Quelle est la différence entre esperluette et point-virgule dans Linux Bash ?

Par exemple,

$ command1 && command2

contre

$ command1; command2
89
nottinhill

Le && l'opérateur est un opérateur AND booléen: si le côté gauche renvoie un statut de sortie non nul, l'opérateur renvoie ce statut et n'évalue pas le côté droit (il court-circuite), sinon il évalue le côté droit et renvoie sa sortie statut. Ceci est couramment utilisé pour s'assurer que command2 n'est exécuté que si command1 a été exécuté avec succès.

Le ; jeton sépare simplement les commandes, ainsi la seconde sera exécutée, que la première réussisse ou non.

111
cdhowie

commande1 && commande2

command1 && command2 exécute command2 si et seulement si) command1 l'exécution se termine avec succès. Dans le jargon Unix, cela signifie code de sortie/code de retour égal à zéro.

commande1; commande2

command1; command2 exécute command2 après avoir exécuté command1, séquentiellement. Peu importe que les commandes aboutissent ou non.

29
jimm-cl

Le premier est une logique simple AND utilisant l’évaluation des courts-circuits, le second délimite simplement deux commandes.

En réalité, lorsque le premier programme renvoie un code de sortie différent de zéro, l'ensemble de AND est évalué en tant que FALSE et la deuxième commande ne sera pas exécutée. Ce dernier les exécute simplement les deux dans l'ordre.

5
Danstahr