&& Ist die logische UND:
&& ist ein Weg , auszudrücken Logisches UND , der gesamte Ausdruck nur wahre Bedeutung ist , wenn beide Seiten davon wahr sind. In der Logik heißt es, dass die gesamte Aussage (P & Q) nur wahr ist, wenn sowohl P als auch Q wahr sind.
Infolgedessen behandeln Computer P & Q im Allgemeinen als Kurzschlussbewertung . Da die gesamte Aussage nur dann wahr ist, wenn sowohl P als auch Q wahr sind, wird die Aussage Q nicht ausgewertet , wenn P falsch ist . Grundsätzlich sind Computer faul (effizient) und stören sich nicht daran, Q zu bewerten, wenn sie es nicht tun. Dies gilt auch für logisches ODER, siehe den vorherigen Link.
Die drei Kontexte von && in Bash:
1) Verwenden der Kurzschlussauswertung mit dem Beendigungsstatus eines Befehls:
Jeder Befehl hat einen Beendigungsstatus. Wenn ein Befehl einen Fehler aufweist, hat er einen Beendigungsstatus ungleich Null. Wenn der Exit-Status also ungleich Null ist und Befehle mit && zu einer Anweisung verkettet werden, werden spätere Befehle nicht ausgewertet (ausgeführt), wenn der frühere keinen Exit-Status von 0 (Wahr) hatte. Dies liegt an der Kurzschlussauswertung. Also, wenn Sie haben:
P && Q
Q wird nicht ausgeführt, wenn P nicht wahr ist (wenn P mit einem Status von etwas anderem als 0 beendet wird, ist dies nicht wahr). Genauso wie:
./configure && make
make wird nicht ausgeführt, wenn configure einen Fehler hatte, der nicht wahr ist. Im Grunde ist es dann eine Schreibweise in der if then-Anweisung:
if ./configure ; then
make
fi
Denken Sie daran, dass 0 in den meisten Kontexten falsch ist, aber nicht, wenn es um einen Exit-Status geht.
2) && Kann in Bashs eingebautem Testbefehl [[]] verwendet werden:
&& Kann auch innerhalb des integrierten Testbefehls in bash [[]] verwendet werden, um Ausdrücke auf ähnliche Weise wie Befehle zu kombinieren. Die gesamte Testoperation ist nur dann wahr, wenn beide Operanden (Seiten) von && wahr sind, zum Beispiel:
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
wäre eine Art zu sagen, wenn $ a eine ganze Zahl zwischen 2 und 5 ist (ohne 2 und 5).
3) Arithmetische Auswertung:
Schließlich kann && in der arithmetischen Auswertung als logisches UND verwendet werden. Wenn beide (logisches UND) der folgenden Zahlen ungleich Null sind, wird 0 zurückgegeben, andernfalls wird 1 zurückgegeben:
kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0