2009-01-19 102 views
10

Câu hỏi này đơn giản như đã nêu trong tiêu đề: Sự khác nhau giữa hai biểu thức sau đây là gì?

$(...) 
`...` 

Ví dụ: hai biến số test1test2 khác nhau?

test1=$(ls) 
test2=`ls` 
+0

@theman: cảm ơn nhận xét "sâu sắc". –

+0

Xin lưu ý rằng đây không chỉ là bash. Điều này làm việc trong ksh và sh cũ đồng bằng (ngay cả trong sh đó không phải là bash trong ngụy trang). – dwc

Trả lời

9

Kết quả là giống nhau, nhưng cú pháp $() mới hơn rõ ràng hơn và dễ đọc hơn. Ít nhất gấp đôi khi cố gắng làm tổ. Làm tổ không dễ dàng với cú pháp cũ, nhưng hoạt động tốt với cú pháp mới.

Hãy so sánh:

$ echo $(ls $(pwd)) 

so:

$ echo `ls \`pwd\`` 

Bạn cần phải thoát khỏi backticks nhúng, do đó, nó khá nhiều phức tạp hơn để cả hai loại và đọc.

Theo this page, có ít nhất một khác biệt nhỏ về cách chúng xử lý các dấu gạch chéo ngược được nhúng kép.

+2

Nesting * là * có thể sử dụng cú pháp backtick, nó chỉ đòi hỏi rất nhiều dấu gạch chéo ngược và nhanh chóng trở nên gần như không đọc được. Đặc biệt là nếu bạn kết hợp các loại trích dẫn khác. – hobbs

+0

@hobbs Cảm ơn, tôi có lẽ đã không nhận ra. Tôi đã chỉnh sửa câu trả lời. – unwind

5

Bạn có thể muốn đọc man bash:

Khi hình thức backquote kiểu cũ thay thế được sử dụng, xuyệc ngược vẫn giữ được nghĩa đen của nó, trừ khi theo sau là $, `, hoặc. Các backquote đầu tiên không phải trước bởi một dấu gạch chéo ngược chấm dứt sự thay thế lệnh. Khi sử dụng biểu mẫu $ (command), tất cả các ký tự giữa các dấu ngoặc đơn tạo nên lệnh; không ai được điều trị đặc biệt.

Đây là phần "Thay thế lệnh" của trang manpage.

5

Sử dụng `` `là cú pháp lịch sử, POSIX đã áp dụng cú pháp` $ (...) chuẩn bây giờ. Xem Section 2.6.3

+0

Thú vị. Tôi luôn nghĩ rằng cú pháp $() là một sự bổ sung bash thuần túy (một cái rất đẹp). –

+0

Lần đầu tiên tôi nhìn thấy nó trong ksh, trở lại vào năm 1992-hay-như vậy, trước khi tôi sử dụng bash thậm chí một lần. – Vatine

+0

Nó thường nghĩ rằng $() là bash cụ thể, nhưng đó là bởi vì vim không cú pháp làm nổi bật theo POSIX, thay vì sử dụng cú pháp vỏ orig mà _very_ vài người mã trong ngày hôm nay. Để nói vim sử dụng cú pháp hợp lệ làm nổi bật cho các kịch bản shell đặt này trong của bạn .vimrc cho g: is_posix = 1 – pixelbeat

Các vấn đề liên quan