Bash / sh – différence entre && et;

J’utilise normalement pour combiner plusieurs commandes dans une ligne, mais certaines personnes préfèrent && . Y a-t-il une différence? Par exemple, cd ~; cd - cd ~; cd - et cd ~ && cd - semble faire la même chose. Quelle version est plus portable, par exemple sera supporté par un sous-ensemble bash comme le shell d’Android?

Si la commande précédente a échoué avec ; le deuxième courra.

Mais avec && le second ne fonctionnera pas.

C’est un opérande “ET” logique “paresseux” entre les opérations.

J’utilise && parce qu’il y a longtemps sur l’ordinateur voisin:

 root# pwd / root# cd /tnp/test; rm -rf * cd: /tnp/test: No such file or directory ... ... and after a while ... ... ^C 

mais pas aidé …;)

cd /tnp/test && rm -rf * est sûr …;)

Dans cmd1 && cmd2 , cmd2 n’est exécuté que si cmd1 réussit (renvoie 0).

En cmd1 ; cmd2 cmd1 ; cmd2 , cmd2 est exécuté dans tous les cas.

Les deux constructions font partie d’un shell compatible POSIX.

Commandes séparées par ; sont exécutés séquentiellement indépendamment de leur état d’achèvement.

Avec && , la deuxième commande est exécutée uniquement si la première se termine correctement (renvoie le statut de sortie 0).

Ceci est couvert dans la page de manuel bash sous Lists . Je m’attendrais à ce que tout shell de type Unix supporte ces deux opérateurs, mais je ne connais pas spécifiquement le shell Android.

&& signifie que la commande suivante est exécutée si le précédent est sorti avec le statut 0. Pour le contraire, utilisez || c’est-à-dire être exécuté si la commande précédente est sortie avec un statut non égal à 0 ; exécute toujours.

Très utile lorsque vous devez effectuer une action particulière selon que la commande précédente a terminé OK ou non.

&& permet une exécution conditionnelle pendant que ; a toujours la deuxième commande en cours d’exécution.

Par exemple, command1 && command2 , command2 ne s’exécutera que lorsque la command1 sera terminée avec la exit 0 , la signalisation se passa bien, pendant que command1 ; command2 était command1 ; command2 command1 ; command2 la deuxième commande sera toujours exécutée quel que soit le résultat de la command1 .

&& est logique ET en bash. Bash a une évaluation de court-circuit du ET logique. Cet idiome est un moyen plus simple d’exprimer ce qui suit:

 cmd1;rc=$? if [ $rc -eq 0 ]; then cmd2 fi 

Tandis que le ; la version est simplement:

 cmd1 cmd2