Bất kỳ lý do để sử dụng hoặc dạy `thay thế` cho sự phát triển mới?


16

Theo hiểu biết của tôi, $(...)cú pháp thay thế lệnh hiện đại hơn được ưa thích hơn `cú pháp dựa trên cơ sở cũ , do cú pháp lồng và thoát dễ dàng hơn và ít bị lỗi hơn.

Hơn nữa, có vẻ như hầu hết các /bin/shkiểu vỏ trong hỗ trợ sử dụng hiện đại $(…):

  • bash
  • tro (và do đó là BusyBox, vì vậy hầu hết nhúng Linux)
  • dấu gạch ngang
  • FreeBSD / thùng / sh

$(…)được chỉ định bởi IEEE 1003.1.

Vì vậy, tôi có 2 câu hỏi rất liên quan:

  • Có bất kỳ lý do để sử dụng `trong phát triển mới của các kịch bản shell trừ khi bạn biết về một hệ thống cũ cụ thể mà tập lệnh sẽ cần phải chạy trên đó không?
  • Có lý do nào để không dạy sinh viên lập trình UNIX chỉ viết $(...)`chỉ thảo luận như một biến thể lỗi thời mà họ có thể gặp phải nếu họ đang đọc các tập lệnh shell của nhà phát triển khác (và có thể cần nếu họ đang làm việc với một hệ thống thực sự cũ hoặc không đạt tiêu chuẩn đối với một số lý do)?

7
Không, không có điểm nào sử dụng hoặc giảng dạy `...`. Nó chỉ dành cho tính di động ngược với vỏ Bourne (giống như vỏ Bourne ^(giống như |) đối với tính di động lùi với vỏ Thomson). Tuy nhiên, (t)cshxin lưu ý rằng không có $(...)(nhưng cũng không có nhiều điểm sử dụng hoặc dạy chúng).
Stéphane Chazelas

2
Đó là một thứ Groucho Marx `; {)
goldilocks

2
Đợi đã, backticks bị phản đối ?? Có ai có một tài liệu tham khảo kinh điển giải thích tại sao? (Các ký tự cú pháp kỳ lạ rất khó tìm kiếm.)
Toán

1
Dễ gõ hơn. `` - 2 phím bấm; $()- shift + 4,9, shift + 0 - 5 lần nhấn phím;
Vi.

3
@MathologistsOrchid stackoverflow.com/questions/9405478/ dường như khá tốt. Backticks rất khó để làm tổ đúng cách, đặc biệt là khi có thêm trích dẫn.
Michael Ekstrand

Câu trả lời:


19

Vì back-tick thường được sử dụng, nên có ý nghĩa khi dạy cấu trúc cú pháp này.

Tất nhiên, $()thay thế lệnh kiểu nên được nhấn mạnh là kiểu mặc định (và cấu trúc tuân thủ tiêu chuẩn).

Tại sao back-ticks vẫn phổ biến? Bởi vì họ tiết kiệm được một ký tự khi gõ và chúng được cho là ít nặng hơn trên mắt.


18
Tôi sẽ không mô tả "ít nặng hơn trên mắt" như một tính năng, nhưng là một lỗi ...
jasonwryan

1
Thông thường tôi sử dụng backsticks trong các trường hợp đơn giản và $ () trong các trường hợp phức tạp. Nhưng rất nhiều tập lệnh đang sử dụng các backsticks cho đến bây giờ, và các sinh viên phải có khả năng phạm vi với chúng.
peterh - Phục hồi Monica

@jasonwryan Trong trường hợp đó, lỗi không phải do sự ngắn gọn, mà là các vấn đề tùy tiện. Ví dụ, sử dụng backticks dễ dàng hơn trên mắt, nhưng đó không phải là lý do tại sao nó được trích khấu hao. Trừ khi bạn đang cố gắng nói đường là theo định nghĩa xấu và tất cả chúng ta nên thích asm cho bất cứ điều gì ... Thật ra tôi thích vẻ ngoài của $()tốt hơn nhưng backticks thì dễ dàng và HẤP DẪN hơn; có thể là hậu quả OCDish pavlovian của lập trình chung.
goldilocks

@goldilocks một khi bạn già đi, khả năng đọc sẽ khó hơn rất nhiều: backticks thực sự vô hình trong mã ở tuổi tôi ...
jasonwryan

3
Trên một bàn phím tiếng Pháp chẳng hạn, `là Altrg + è, (khó khăn khi phải loại), trong khi $, (, )không cần bất kỳ sửa đổi.
Stéphane Chazelas

5

Tôi sẽ không sử dụng chúng để lập trình, và dạy sử dụng thay thế backtick trong các kịch bản shell vì lỗi thời là tốt (điều này có vẻ là sự đồng thuận). Tuy nhiên, tôi không nghĩ rằng họ vốn đã xấu xa và (ít nhất là đánh giá theo hướng dẫn trung bình của bạn về dòng lệnh Linux), chúng vẫn thường được sử dụng trong các đoạn mã đơn giản / một lớp lót trong đó chúng có thể sẽ không được lồng vào nhau và những thứ bạn Tôi sẽ chỉ làm một lần.

Xem Lệnh thay thế: backticks hoặc ký hiệu đô la / paren kèm theo? .


1

Tôi tránh sử dụng $()cấu trúc vì nó không di động - trong thế giới thực. Bạn đã liệt kê bốn vỏ - có rất nhiều biến thể hơn xung quanh (một thứ tự cường độ?). Hãy thử chạy tập lệnh của bạn trong Solaris / bin / sh và xem cách bạn đi.

Mặt khác, khi nào bạn ngừng hỗ trợ các hệ thống cũ? bạn có thể không bao giờ tiến tới những cách làm mới không? Tôi nghĩ bạn nên tin tưởng vào phán đoán của chính mình, và nếu bạn có thể thấy một lợi thế nhất định của cách mới so với cách cũ, thì hãy đi ... đây không phải là một trong số đó (cá nhân tôi thấy các bacticks rõ ràng hơn - chúng không thể nhầm lẫn với sự thay thế biến shell, đó là một điều khác biệt)


1
POSIX không chỉ định rằng /bin/shphải phù hợp. Solaris /bin/shthực sự rất không tuân thủ - mặc dù Solaris 9/10 / ... chính thức tuân thủ POSIX. Đây $()chỉ là một cấu trúc mà nó không hiểu. Nhưng có nhiều hơn nó không hiểu hoặc được giải thích khác nhau. Cách di động để có được sự phù hợp shđể tìm kiếm nó trong đường dẫn được trả về getconf PATH.
maxschlepzig
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.