Sự khác biệt giữa dấu kép và (&&) và dấu chấm phẩy (;) trong Linux Bash là gì?


112

Sự khác biệt giữa dấu và và dấu chấm phẩy trong Linux Bash là gì?

Ví dụ,

$ command1 && command2

vs

$ command1; command2

6
Tôi trả lời này ở đây: superuser.com/a/619019/107862
Etan Reisner

9
Về độ lạc đề, lần trước mình kiểm tra thì bash vẫn là ngôn ngữ lập trình nhưng trước đây mình nhầm và có thể là kẹo hoa quả sấy khô.
Steve K

Đó là, và bạn đã đặt một câu hỏi về một hành vi cụ thể hoặc cách thích hợp để làm một việc nhất định thì chắc chắn nó sẽ là chủ đề. Câu hỏi này thuộc danh mục "câu hỏi về cú pháp của một ngôn ngữ" xám hơn, đây không phải là câu hỏi "lập trình" rõ ràng như tôi lo ngại.
Etan Reisner

4
bash theo một số cách là khô, và theo một số cách ngọt ngào. Vào cuối ngày, nó khá dễ chịu và tiêu hóa. Tuy nhiên, nó không thể dễ dàng bị đánh cắp từ trẻ sơ sinh.
code_monk

Câu trả lời:


138

Các &&nhà điều hành là một boolean VÀ điều hành: nếu phía bên trái trả về một tình trạng khác không xuất cảnh, trở về nhà điều hành mà tình trạng và không đánh giá phía bên phải (nó ngắn mạch), nếu không nó đánh giá phía bên phải và trả về trạng thái thoát của nó . Điều này thường được sử dụng để đảm bảo rằng command2chỉ chạy nếu command1chạy thành công.

;thông báo chỉ tách các lệnh, vì vậy nó sẽ chạy lệnh thứ hai bất kể lệnh đầu tiên có thành công hay không.


6
ký hiệu kép và &&khác với ký hiệu đơn và &trong bazơ?
Charlie Parker

16
@CharlieParker &khiến lệnh chạy trong nền, vì vậy có. "Chạy lệnh này trong nền" rất khác với "chỉ chạy lệnh tiếp theo này nếu lệnh kia thành công."
cdhowie

Lệnh2 sẽ chỉ chạy lệnh1 trả về trạng thái không thoát, có nghĩa là nó đã kết thúc thành công ..
Nik

33

command1 && command2

command1 && command2thực thi command2nếu (và chỉ khi) command1việc thực thi kết thúc thành công. Trong biệt ngữ Unix, điều đó có nghĩa là mã thoát / mã trả về bằng không.

lệnh1; command2

command1; command2thực thi command2sau khi thực thi command1, tuần tự. Không quan trọng liệu các lệnh có thành công hay không.


6

Đầu tiên là một logic đơn giản ANDsử dụng đánh giá ngắn mạch, thứ hai chỉ đơn giản phân định hai lệnh.

Điều xảy ra trong thực tế là khi chương trình đầu tiên trả về mã thoát khác không, toàn bộ ANDđược đánh giá thành FALSEvà lệnh thứ hai sẽ không được thực thi. Sau đó chỉ cần thực hiện cả hai theo thứ tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.