sự khác biệt giữa lệnh của & & lệnh Lệnh & & Lệnh; chỉ huy"


49

Tôi thấy hai cách sử dụng này trên Ubuntu "lệnh && lệnh" và "lệnh; lệnh",
vdapt-get update && apt-get upgrade

Điều gì sẽ khác nếu tôi sử dụng apt-get update; apt-get upgrade?
Tôi không yêu cầu sử dụng cụ thể này nhưng nói chung sự khác biệt giữa hai cách sử dụng này là gì?


2
Win dòng lệnh và lô có tính năng tương tự : & (simple sequencing), && (conditional AND) and || (conditional OR).
Karan

5
Xem thêm: Hướng dẫn tham khảo Bash - Danh sách các lệnh . Nói chung, không có gì bạn không thể tìm thấy trong tài liệu; nó thực sự đáng xem nếu bạn có câu hỏi về các yếu tố cú pháp cụ thể.
slhck

1
@Karan Và để hoàn thiện, bash (linux / Ubuntu) ||cũng vậy.
Izkata

Câu trả lời:


88

&&là một toán tử logic. ;là trình tự đơn giản.

Trong cmd1 && cmd2, cmd2 sẽ chỉ được chạy nếu cmd1 thoát với mã trả về thành công.

Trong khi đó cmd1; cmd2, cmd2 sẽ chạy bất kể trạng thái thoát của cmd1 (giả sử bạn chưa đặt shell của mình thoát khỏi tất cả các lỗi trong tập lệnh của bạn hoặc một cái gì đó).

Trên một lưu ý liên quan, với cmd1 || cmd2, bằng cách sử dụng ||toán tử logic 'OR', cmd2 sẽ chỉ được chạy nếu cmd1 không thành công (trả về mã thoát khác không).

Các toán tử logic này đôi khi được sử dụng trong các tập lệnh thay cho câu lệnh if cơ bản. Ví dụ,

if [[ -f "$foo" ]]; then mv "$foo" "${foo%.txt}.mkd"; fi

... có thể đạt được chính xác hơn với:

[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"

Tôi thấy nó hơi sai lầm bởi vì theo sự hiểu biết của tôi, mã trả về thành công có nghĩa là 0, khi được đưa vào bool, sẽ đưa ra một logic sai. Vì vậy, theo triết lý đánh giá Mccarthy được sử dụng trong hầu hết các ngôn ngữ, nó sẽ ngay lập tức trả về false thay vì đánh giá (chạy) câu lệnh tiếp theo.
Della

33

Cú pháp

command1 && command2

lệnh2 được thực thi nếu và chỉ khicommand1trả về trạng thái thoát bằng 0 ( true ). Nói cách khác, chạycommand1và nếu nó thành công, thì hãy chạycommand2.

command1 ; command2

Cả lệnh1lệnh2 sẽ được thực thi bất kể. Dấu chấm phẩy cho phép bạn gõ nhiều lệnh trên một dòng.

Liên quan :

command1 || command2

lệnh2 được thực thi nếu và chỉ khi, lệnh1 trả về trạng thái thoát khác không. Nói cách khác, chạycommand1thành công hoặc chạycommand2.


Thí dụ

&& nhà điều hành:

$ rm /tmp/filename && echo "File deleted"

; nhà điều hành:

$ echo "foo" ; echo "bar"

|| nhà điều hành:

$ cat /tmp/filename 2>/dev/null || echo "Failed to open file"

Liện kết ngoại

  1. Linuxtopia.org
  2. Tldp.org
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.