En ce qui concerne le hors-sujet, la dernière fois que j'ai vérifié, bash était toujours un langage de programmation, mais je me suis trompé avant et cela pourrait être des bonbons aux fruits secs.
Steve K
C'est le cas, et si vous posiez une question sur un comportement spécifique ou sur la bonne façon de faire une certaine chose, ce serait certainement sur le sujet. Cela tombe dans une catégorie plus grise de «question sur la syntaxe d'un langage» qui n'est pas aussi clairement une question de «programmation» en ce qui me concerne.
Etan Reisner
4
bash est à certains égards sec et à certains égards sucré. En fin de compte, c'est assez agréable et digeste. Il ne peut cependant pas être facilement volé aux bébés.
code_monk
Réponses:
139
L' &&opérateur est un opérateur ET booléen: si le côté gauche renvoie un état de sortie différent de zéro, l'opérateur renvoie cet état et n'évalue pas le côté droit (il court-circuite), sinon il évalue le côté droit et renvoie son état de sortie . Ceci est couramment utilisé pour s'assurer qu'il command2n'est exécuté que s'il est command1exécuté avec succès.
Le ;jeton sépare simplement les commandes, il exécutera donc la deuxième commande, que la première réussisse ou non.
la double esperluette est-elle &&différente d'une esperluette simple &dans bash?
Charlie Parker
16
@CharlieParker &provoque l' exécution de la commande en arrière-plan, donc oui. «Exécuter ceci en arrière-plan» est très différent de «exécuter cette commande suivante uniquement si celle-ci réussit».
cdhowie
La commande2 exécutera uniquement la commande1 a renvoyé l' état de sortie zéro , ce qui signifie qu'elle s'est terminée avec succès ..
Nik
;Attend- il toujours la fin de la première commande?
rfii il y a
@rfii Oui, mais il exécute la deuxième commande sans se soucier de savoir si la première commande a réussi. a;bsignifie «courir apuis courir b». a&&bsignifie "exécuter a, puis exécuter buniquement si cela aa réussi."
cdhowie
33
commande1 && commande2
command1 && command2s'exécute command2si (et seulement si) l' command1exécution se termine avec succès. Dans le jargon Unix, cela signifie un code de sortie / code de retour égal à zéro.
command1; commande2
command1; command2s'exécute command2après exécution command1, séquentiellement. Peu importe que les commandes aient réussi ou non.
Le premier est une logique simple ANDutilisant l'évaluation des courts-circuits, le second délimite simplement deux commandes.
Ce qui se passe en réalité, c'est que lorsque le premier programme renvoie un code de sortie différent de zéro, le tout ANDest évalué FALSEet la deuxième commande ne sera pas exécutée. Ce dernier les exécute simplement tous les deux dans l'ordre.
Réponses:
L'
&&
opérateur est un opérateur ET booléen: si le côté gauche renvoie un état de sortie différent de zéro, l'opérateur renvoie cet état et n'évalue pas le côté droit (il court-circuite), sinon il évalue le côté droit et renvoie son état de sortie . Ceci est couramment utilisé pour s'assurer qu'ilcommand2
n'est exécuté que s'il estcommand1
exécuté avec succès.Le
;
jeton sépare simplement les commandes, il exécutera donc la deuxième commande, que la première réussisse ou non.la source
&&
différente d'une esperluette simple&
dans bash?&
provoque l' exécution de la commande en arrière-plan, donc oui. «Exécuter ceci en arrière-plan» est très différent de «exécuter cette commande suivante uniquement si celle-ci réussit».;
Attend- il toujours la fin de la première commande?a;b
signifie «courira
puis courirb
».a&&b
signifie "exécutera
, puis exécuterb
uniquement si celaa
a réussi."commande1 && commande2
command1 && command2
s'exécutecommand2
si (et seulement si) l'command1
exécution se termine avec succès. Dans le jargon Unix, cela signifie un code de sortie / code de retour égal à zéro.command1; commande2
command1; command2
s'exécutecommand2
après exécutioncommand1
, séquentiellement. Peu importe que les commandes aient réussi ou non.la source
Le premier est une logique simple
AND
utilisant l'évaluation des courts-circuits, le second délimite simplement deux commandes.Ce qui se passe en réalité, c'est que lorsque le premier programme renvoie un code de sortie différent de zéro, le tout
AND
est évaluéFALSE
et la deuxième commande ne sera pas exécutée. Ce dernier les exécute simplement tous les deux dans l'ordre.la source