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 -
Et cd ~ && cd -
Semblent faire la même chose. Quelle version est la plus portable, par exemple sera pris en charge par un sous-ensemble bash comme le shell d'Android ou autre?
Si la commande précédente a échoué avec ;
le second fonctionnera.
Mais avec &&
le second ne fonctionnera pas.
Ceci est un opérande "ET" logique "paresseux" entre les opérations.
J'utilise &&
_ car 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écurisé... ;)
Dans cmd1 && cmd2
, cmd2
n'est exécuté que si cmd1
réussit (renvoie 0).
Dans cmd1 ; cmd2
, cmd2
est exécuté dans tous les cas.
Les deux constructions font partie d'un shell compatible POSIX.
&&
signifie exécuter la commande suivante si la précédente est sortie avec le statut 0. Au contraire, utilisez ||
c’est-à-dire à exécuter si la commande précédente se termine avec un statut différent de 0 ;
exécute toujours.
Très utile lorsque vous devez effectuer une action particulière selon que la commande précédente se termine correctement ou non.
Les commandes sont séparées par ;
sont exécutés de manière séquentielle, quel que soit leur statut d'achèvement.
Avec &&
, la deuxième commande n'est exécutée que si la première aboutit (retourne l'état de sortie à 0).
Ceci est couvert dans la page de manuel bash sous Lists
. Je m'attendrais à ce qu'un shell de type Unix supporte ces deux opérateurs, mais je ne connais pas spécifiquement le shell Android Shell.
&&
permet une exécution conditionnelle tandis que ;
a toujours la deuxième commande en cours d'exécution.
Dans par exemple command1 && command2
, command2
ne s’exécutera que lorsque command1
a terminé avec exit 0
, signalant que tout s'est bien passé, alors que dans command1 ; command2
la deuxième commande sera toujours exécutée quel que soit le résultat de command1
.
&& est logique ET en bash. Bash a une évaluation de court-circuit de 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