2012-03-29 11 views
3

Wir && wissen bedeutet logische AND, so:shell's Logik UND, cmd1 && cmd2, ist es umgekehrt, oder?

true && true => true 
false && true => false 

Wenn wir in Shell (Bash hier), erfolgreiche Kommandoaufruf 0 kehrt arbeiten. Ändert die Shell 0 zu non-zero vor AND Betrieb? Oder Shell einfach umgekehrt die normale logics?

Als Beispiel:

cat file1 && cat file2 

file2 wird cat-ed nur, wenn file1cat-ed sein kann.

Antwort

1

In Bash beinhalten wird, logische true als 0 dargestellt, während logische false als nicht-Null-Wert repräsentiert wird. Dadurch kann der Ausgangswert eines Befehls in einer logischen Operation verwendet werden.

Sie können mehr herausfinden, indem Sie die documentation on bash operators durchsuchen.

One common idiom sind Befehle an der Kette mit && so, dass, wenn jeder Befehl in der Kette ausfällt, werden die folgenden Befehle nicht ausgeführt:

cmd1 && cmd2 && cmd3 
+0

Es kann so passieren: 'if [-f Datei1] && [-f Datei2]; dann cat datei1 && cat datei2; fi' –

5

In der Shell (Bash enthalten) && bedeutet logisch UND. Die Parameter von && können Befehle sein, die entsprechend ihrem Rückgabewert ausgewertet werden - ein Rückgabewert von 0 zeigt Erfolg (wahr), andere Werte Fehler (falsch) an.

So in einem C/C++ Sinne es (in C/C++ und seine ilk 0 = false, andere = true) umgekehrt wird, aber aus der Sicht der Schale ist es nicht (Erfolg = true, fail = false)

UPDATE: geänderte Erklärung Kommentar aus, dass && nicht necesarily Ausführung von Befehlen

+0

Nicht gerade, '' && ein echter logischer Operator in bash ist. Ausführung ist ein Nebeneffekt. Das ist ähnlich zu C: 'if ((method() && method2()) == 0)' 'führt' method2() 'niemals aus, wenn' method' false zurückgibt. – brice

+0

@brice - danke, ich habe meine Antwort aktualisiert – Attila