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