Quelle est la raison d’utiliser && au lieu de; placer aux commandes sur la même ligne?

30

N'étant pas un expert de Linux et non d'Unix, je me demande quelle est la différence entre ces 2 méthodes pour enchaîner 2 commandes sur la même ligne? Je ne vois aucune différence de sortie dans cet exemple simpliste

Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Cela n'a posé aucun problème - je suis juste curieux ..

pfeiffep
la source

Réponses:

43

&&est un «et» logique. Le premier argument est évalué et le second n'est évalué que si le premier renvoie vrai. La raison en est que "faux ET quelque chose" est toujours faux, donc pas besoin d'évaluer le deuxième argument dans ce cas.

Donc, en utilisant &&vous assurez-vous que la deuxième commande n'est pas exécutée si la première signale une erreur ( trueest représentée par le code de sortie 0, ce qui indique qu'il n'y a pas eu d'erreur). En revanche, ;exécute les deux commandes, quel que soit le résultat de la première.

Conclusion: enchaîner les commandes avec &&est une bonne habitude. Contrairement à ;cela, il n'exécutera pas les commandes suivantes en cas de problème.

azimut
la source
voulez-vous dire que cela 0signifie trueou cela 0signifie vrai - il y a une erreur?
Michael Butler
1
@MichaelButler: 0signifie true. J'ai ajouté une précision.
azimut
26

;

Exécute séquentiellement les commandes, quel que soit l'état de sortie précédent:

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command

&&

ET logique

Exécutez la commande suivante, mais uniquement si la commande précédente a réussi (l'état de sortie était 0):

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#

||

OU logique

Exécutez la commande suivante, mais uniquement si la commande précédente a échoué (l'état de sortie n'était pas 0 ):

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command
phoibos
la source
6
En outre, sh -c "exit 0"peut être remplacé par truedans ces exemples, et sh -c "exit 1"avec false.
Flimm