&& Là logic VÀ:
&& là cách diễn đạt logic VÀ , có nghĩa là toàn bộ biểu thức là True chỉ khi cả hai mặt của nó đều đúng. Trong logic, người ta nói rằng toàn bộ tuyên bố (P & Q) chỉ đúng khi cả P và Q đều đúng.
Do đó, các máy tính thường coi P & Q là một đánh giá ngắn mạch . Vì vậy, vì toàn bộ câu lệnh sẽ chỉ đúng nếu cả P và Q đều đúng, nên nếu P sai, câu lệnh Q không được đánh giá . Về cơ bản, máy tính rất lười biếng (hiệu quả) và đừng bận tâm đến việc đánh giá Q nếu chúng không có. Điều này cũng đúng với logic HOẶC, xem liên kết trước.
Ba bối cảnh của && trong Bash:
1) Sử dụng Đánh giá ngắn mạch với trạng thái thoát của Lệnh:
Mỗi lệnh đều có trạng thái thoát. Nếu một lệnh có lỗi, nó có trạng thái thoát khác không. Vì vậy, nếu trạng thái thoát là khác không và && được sử dụng để xâu chuỗi các lệnh lại với nhau thành một câu lệnh, các lệnh sau sẽ không được đánh giá (được thực thi) nếu trạng thái trước đó không có trạng thái thoát là 0 (Đúng). Điều này là do đánh giá ngắn mạch. Vì vậy, nếu bạn có:
P && Q
Q sẽ không được thực thi nếu P không đúng (nếu P thoát với trạng thái bất cứ điều gì ngoài 0, thì điều đó không đúng). Cũng giống như:
./configure && make
thực hiện sẽ không được thực thi nếu cấu hình có lỗi, không đúng. Về cơ bản, sau đó kết thúc là một cách viết trong câu lệnh if then:
if ./configure ; then
make
fi
Hãy ghi nhớ sau đó trong hầu hết các bối cảnh 0 là sai, nhưng không phải khi nói đến trạng thái thoát.
2) && Có thể được sử dụng trong lệnh kiểm tra [[]] tích hợp của Bash:
&& Cũng có thể được sử dụng bên trong lệnh kiểm tra tích hợp trong bash [[]] để kết hợp các biểu thức theo cách tương tự như kết hợp các lệnh. Toàn bộ hoạt động kiểm tra sẽ chỉ đúng nếu cả hai toán hạng (bên) của && đều đúng, chẳng hạn:
if [[ ( $a -gt 2 ) && ( $a -lt 5 ) ]]; then ...
sẽ là một cách để nói nếu $ a là một số nguyên nằm trong khoảng từ 2 đến 5 (không bao gồm 2 và 5).
3) Đánh giá số học:
Cuối cùng, && có thể được sử dụng trong đánh giá số học dưới dạng logic VÀ. Nếu cả hai (logic AND) của các số sau đây đều khác không, nó trả về 0, 1 khác được trả về:
kbrandt@desktop:~/$ echo $((1 & 1))
1
kbrandt@desktop:~/$ echo $((0 && 1))
0