Sử dụng backticks hoặc đô la trong tập lệnh shell


9

Tôi đang bận viết kịch bản shell (sử dụng Bash) trong đó tôi cần nhập một số biến từ kết quả trả về của lệnh khác.

Vì vậy, tôi đang sử dụng một cú pháp như thế này:

VAR=`command 2>/dev/null`

Nhưng khi tìm kiếm thông tin về shell script, tôi thường thấy rằng có thể đạt được những điều trên bằng cách sử dụng cú pháp sau:

VAR=$(command 2>/dev/null)

Cả hai đều làm việc cho tôi (tôi đã nhận được kết quả mong đợi trong cả hai trường hợp) và do đó tôi tự hỏi liệu tôi vẫn có thể sử dụng cả hai hình thức thay thế cho nhau hay tôi phải tuân theo một hình thức để chắc chắn tuân thủ sự tiến hóa trong tương lai Vỏ?



Các liên kết của belacqua cung cấp rất nhiều thông tin về sự khác biệt và cách sử dụng. Đóng vì nó không liên quan đến vấn đề Ubuntu, mà nhiều hơn là vấn đề lập trình. Tôi rất khuyến khích theo các liên kết được đề cập ở trên.
Luis Alvarado

Câu trả lời:


13

Sử dụng đô la. Backticks không được dùng nữa , vì chúng phức tạp hơn để sử dụng (xem liên kết) và không có lợi thế nào cho chúng trừ khi bạn đang chơi golf mã và hoàn toàn cần phải lưu một ký tự. Chúng có thể sẽ không bị xóa khỏi các vỏ phổ biến bất cứ lúc nào sớm, vì vậy bây giờ bạn an toàn khi sử dụng.


3

Gắn bó với ký hiệu đô la $()bất cứ khi nào bạn có thể. Backticks trở nên cồng kềnh / khó hiểu khi bạn bắt đầu cần làm trích dẫn lồng nhau. Ví dụ:

$ FOO=`echo "foo's"`
$ echo $FOO
foo's

Thay thế backticks bằng $()năng suất cho cùng một đầu ra và dễ đọc hơn (ít trích dẫn về các góc độ khác nhau để phân biệt):

$ FOO=$(echo "foo's")
$ echo $FOO
foo's

Điều đó và mỗi dấu ngoặc kép (trích dẫn đơn, trích dẫn kép, backtick) có nghĩa là một cái gì đó khác nhau trong vỏ, vì vậy sử dụng $ có thể giúp loại bỏ một mức độ phức tạp. Và nhà phát triển theo dõi bạn sẽ cảm ơn bạn, vì anh ấy / cô ấy sẽ có một thời gian dễ dàng hơn để tìm ra những gì bạn đã làm.


Backticks thậm chí không thể được lồng nhau chức năng.
Bernhard

@Bernhard Ví dụ của tôi cho thấy những gì tôi đã nghĩ trong đầu với câu nói đó.
Aaron
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.