Có hai ý nghĩa khác nhau của "không dùng nữa".
bị phản đối: (chủ yếu là một tính năng phần mềm) có thể sử dụng được nhưng được coi là lỗi thời và tốt nhất nên tránh, thường là do đã được thay thế.
Từ điển Oxford American Oxford
Theo định nghĩa này, backticks không được chấp nhận.
Trạng thái không dùng nữa cũng có thể cho biết tính năng này sẽ bị xóa trong tương lai.
- Wikipedia
Theo định nghĩa này, backticks không được phản đối.
Vẫn được hỗ trợ:
Trích dẫn Đặc tả nhóm mở trên Ngôn ngữ lệnh Shell , cụ thể là phần "2.6.3 Thay thế lệnh", có thể thấy rằng cả hai hình thức thay thế lệnh, backticks ( `..cmd..`
) hoặc đô la parens ( $(..cmd..)
) vẫn được hỗ trợ trong trường hợp thông số kỹ thuật.
đoạn trích
Thay thế lệnh cho phép đầu ra của một lệnh được thay thế thay cho tên lệnh. Thay thế lệnh sẽ xảy ra khi lệnh được bao quanh như sau:
$(command)
or (backquoted version):
`command`
Shell sẽ mở rộng thay thế lệnh bằng cách thực hiện lệnh trong môi trường lớp con (xem Môi trường thực thi Shell) và thay thế lệnh thay thế (văn bản lệnh cộng với bao vây $()
hoặc backquote) bằng đầu ra tiêu chuẩn của lệnh, loại bỏ các chuỗi của một hoặc nhiều ký tự <newline> ở cuối thay thế. Các ký tự <newline> đã nhúng trước khi kết thúc đầu ra sẽ không bị xóa; tuy nhiên, chúng có thể được coi là các dấu phân cách trường và bị loại bỏ trong quá trình tách trường, tùy thuộc vào giá trị của IFS và trích dẫn có hiệu lực. Nếu đầu ra chứa bất kỳ byte rỗng nào, hành vi không được chỉ định.
Trong kiểu thay thế lệnh được trích dẫn ngược , <backslash> sẽ giữ nguyên nghĩa đen của nó, ngoại trừ khi được theo sau: '$', ' \`
' hoặc <backslash> . Việc tìm kiếm backquote phù hợp sẽ được thỏa mãn bởi backquote không thoát được trích dẫn đầu tiên; trong quá trình tìm kiếm này, nếu gặp phải một backquote không thoát trong một bình luận shell, tài liệu ở đây, một sự thay thế lệnh nhúng của $(command)
biểu mẫu hoặc một chuỗi trích dẫn, kết quả không xác định xảy ra. Một chuỗi trích dẫn đơn hoặc trích dẫn kép bắt đầu, nhưng không kết thúc, trong `...`
chuỗi "" tạo ra kết quả không xác định.
Với $(command)
biểu mẫu, tất cả các ký tự theo dấu ngoặc đơn mở cho dấu ngoặc đơn đóng phù hợp sẽ tạo thành lệnh. Bất kỳ tập lệnh shell hợp lệ nào cũng có thể được sử dụng cho lệnh, ngoại trừ tập lệnh chỉ bao gồm các hướng dẫn lại tạo ra kết quả không xác định.
Vậy thì tại sao mọi người lại nói rằng backticks đã bị phản đối?
Bởi vì hầu hết các trường hợp sử dụng nên sử dụng hình thức parens đô la thay vì backticks. (Không được dùng theo nghĩa đầu tiên ở trên.) Nhiều trang web có uy tín nhất (bao gồm cả U & L) thường nêu rõ điều này, trong suốt, vì vậy đó là lời khuyên đúng đắn. Lời khuyên này không nên bị nhầm lẫn với một số kế hoạch không tồn tại để loại bỏ hỗ trợ cho backticks khỏi vỏ.
LƯU Ý: Đoạn trích thứ ba (ở trên) tiếp tục hiển thị một số tình huống trong đó backticks đơn giản là không hoạt động, nhưng phương pháp parens đô la mới hơn thực hiện, bắt đầu với đoạn sau:
Ngoài ra, cú pháp được trích dẫn lại có các hạn chế lịch sử đối với nội dung của lệnh được nhúng. Mặc dù biểu mẫu "$ ()" mới hơn có thể xử lý bất kỳ loại tập lệnh nhúng hợp lệ nào, biểu mẫu được trích dẫn lại có thể xử lý một số tập lệnh hợp lệ bao gồm các câu hỏi ngược.
Nếu bạn tiếp tục đọc phần đó, các thất bại được tô sáng cho thấy họ sẽ thất bại như thế nào khi sử dụng backticks, nhưng hãy thực hiện bằng cách sử dụng ký hiệu parens đô la mới hơn.
Kết luận
Vì vậy, tốt hơn là bạn nên sử dụng đồng đô la thay vì backticks nhưng thực tế bạn không sử dụng thứ gì đó bị "phản đối" về mặt kỹ thuật như trong "điều này sẽ ngừng hoạt động hoàn toàn tại một số điểm theo kế hoạch."
Sau khi đọc tất cả những điều này, bạn nên bỏ đi rằng bạn được khuyến khích sử dụng đồng đô la trừ khi bạn đặc biệt yêu cầu khả năng tương thích với vỏ Bourne không phải POSIX ban đầu.
cd
đến một thư mục để biết ví dụ về lý do tại sao$(...)
ký hiệu dễ sử dụng hơn dấu ngoặc kép lồng nhau.