&& jest logicznym AND:
&& jest sposobem wyrażenia Logicznego AND , co oznacza, że całe wyrażenie jest Prawdą tylko wtedy, gdy obie strony są prawdziwe. W logice mówi się, że cała instrukcja (P&Q) jest prawdziwa tylko wtedy, gdy zarówno P, jak i Q są prawdziwe.
W rezultacie komputery zazwyczaj traktują P&Q jako ocenę zwarcia . A zatem, ponieważ cała instrukcja będzie Prawdą tylko wtedy, gdy Zarówno P, jak i Q są prawdziwe, to jeśli P jest fałszem, instrukcja Q nie jest oceniana . Zasadniczo komputery są leniwe (wydajne) i nie zawracają sobie głowy oceną Q, jeśli też nie mają. Dotyczy to również logicznej OR, patrz poprzedni link.
Trzy konteksty && w Bash:
1) Korzystanie z oceny zwarć ze statusem wyjścia polecenia:
Każde polecenie ma status wyjścia. Jeśli polecenie ma błąd, ma niezerowy status wyjścia. Więc jeśli status wyjścia jest niezerowy, a && jest używany do łączenia poleceń w instrukcję, późniejsze polecenia nie będą oceniane (wykonywane), jeśli wcześniejsze nie miały statusu wyjścia 0 (Prawda). Wynika to z oceny zwarcia. Więc jeśli masz:
P && Q
Q nie zostanie wykonane, jeśli P nie jest prawdą (jeśli P wyjdzie ze statusem o wartości innej niż 0, to nie jest prawda). Tak samo jak:
./configure && make
make nie zostanie wykonane, jeśli config miał błąd, nie było prawdą. Zasadniczo jest to sposób na napisanie instrukcji if, jeśli:
if ./configure ; then
make
fi
Należy pamiętać, że w większości kontekstów 0 jest fałszem, ale nie dotyczy statusu wyjścia.
2) && Można używać we wbudowanym poleceniu testowym Bash [[]]:
&& Może być również używany wewnątrz wbudowanego polecenia testowego w bash [[]] do łączenia wyrażeń w podobny sposób jak łączenie poleceń. Cała operacja testowa będzie prawdziwa tylko wtedy, gdy oba operandy (strony) && są prawdziwe, na przykład:
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
można by powiedzieć, że $ a jest liczbą całkowitą między 2 a 5 (nie licząc 2 i 5).
3) Ocena arytmetyczna:
Wreszcie, && można wykorzystać w ocenie arytmetycznej jako Logiczne AND. Jeśli obie (logiczne AND) poniższych liczb są niezerowe, zwraca 0, w przeciwnym razie zwracane jest 1:
kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0