Was ist der Unterschied zwischen doppeltem kaufmännischem Und (&&) und Semikolon (;) in Linux Bash?

112

Was ist der Unterschied zwischen kaufmännischem Und und Semikolon in Linux Bash ?

Beispielsweise,

$ command1 && command2

vs.

$ command1; command2
Steve K.
quelle
6
Ich habe dies hier beantwortet: superuser.com/a/619019/107862
Etan Reisner
9
In Bezug auf die Off-Topicness war Bash, als ich das letzte Mal nachgesehen habe, immer noch eine Programmiersprache, aber ich habe mich vorher geirrt und es könnte sich um getrocknete Früchte handeln.
Steve K
Es ist so, und würden Sie eine Frage zu einem bestimmten Verhalten oder dem richtigen Weg stellen, um eine bestimmte Sache zu tun, wäre dies sicherlich ein Thema. Dies fällt in eine grauere Kategorie von "Fragen zur Syntax einer Sprache", die für mich nicht so eindeutig eine "Programmier" -Frage ist.
Etan Reisner
4
Bash ist in gewisser Weise trocken und in gewisser Weise süß. Am Ende des Tages ist es sehr angenehm und verdaulich. Es kann jedoch nicht leicht von Babys gestohlen werden.
Code_Monk

Antworten:

138

Der &&Operator ist ein boolescher UND-Operator: Wenn die linke Seite einen Exit-Status ungleich Null zurückgibt, gibt der Operator diesen Status zurück und wertet die rechte Seite nicht aus (sie schließt kurz), andernfalls wertet er die rechte Seite aus und gibt ihren Exit-Status zurück . Dies wird häufig verwendet, um sicherzustellen, dass command2es nur ausgeführt wird, wenn es command1erfolgreich ausgeführt wurde.

Das ;Token trennt nur Befehle, sodass der zweite Befehl ausgeführt wird, unabhängig davon, ob der erste erfolgreich ist oder nicht.

cdhowie
quelle
6
&&Unterscheidet sich das doppelte kaufmännische Und von einem einzelnen kaufmännischen Und &in Bash?
Charlie Parker
16
@CharlieParker &bewirkt, dass der Befehl im Hintergrund ausgeführt wird, also ja. "Dies im Hintergrund ausführen" unterscheidet sich stark von "Diesen nächsten Befehl nur ausführen, wenn dieser andere erfolgreich ist".
CDhowie
Der Befehl2 wird nur Befehl1 ausführen, der den Exit-Status Null zurückgibt , was bedeutet, dass er erfolgreich beendet wurde.
Nik
33

Befehl1 && Befehl2

command1 && command2wird ausgeführt, command2wenn (und nur wenn) die command1Ausführung erfolgreich endet. Im Unix-Jargon bedeutet dies, dass der Exit-Code / Return-Code gleich Null ist.

Befehl1; Befehl2

command1; command2wird command2nach der Ausführung command1nacheinander ausgeführt. Es spielt keine Rolle, ob die Befehle erfolgreich waren oder nicht.

jimm-cl
quelle
6

Ersteres ist eine einfache Logik ANDmit Kurzschlussauswertung, letzteres begrenzt einfach zwei Befehle.

In der Realität wird das Ganze ANDausgewertet , wenn das erste Programm einen Exit-Code ungleich Null zurückgibt , FALSEund der zweite Befehl wird nicht ausgeführt. Letzterer führt sie einfach beide der Reihe nach aus.

Danstahr
quelle