2013-08-19 32 views
10

Đây có thể không phải là câu hỏi kích thích tư duy nhất, nhưng tuy nhiên tôi đã đánh thức được sự tò mò của tôi. Tôi đã không thể đi qua bất kỳ câu trả lời (hãy để một mình một dứt khoát) trên web.Tại sao các đối số dòng lệnh bash sau 9 yêu cầu dấu ngoặc nhọn?

Khi đọc Advanced Shell Scripting, tôi xem qua số this section về các tham số vị trí dòng lệnh cho biết bất kỳ điều gì sau đối số thứ chín phải được bao quanh bởi $ {} (dạng tham chiếu/thay thế biến dài hơn).

Nói một cách đơn giản, tại sao bạn phải tham chiếu đối số dòng lệnh mười (và hơn thế nữa) là ${10}, ${11}... thay vì $10, $11, ...?

+11

Lịch sử; vỏ Bourne gốc giải thích '$ 12' là' $ {1} 2' (và không cho phép '$ {12}' AFAICR). –

Trả lời

6

Cụ thể, câu hỏi của bạn liên quan đến "thông số vị trí". Sử dụng $ var thay vì $ {var} là viết tắt trong bash. Trong hầu hết các trường hợp, nó hoạt động tốt. Các biến Bash phải bắt đầu bằng một chữ cái hoặc dấu gạch dưới. Nó xử lý nội bộ các biến bắt đầu bằng một chữ số là "tham số vị trí". Khi bash phát hiện một tham số vị trí, nó chỉ nhìn vào chữ số đầu tiên, đó là lý do tại sao $ 10 trả về $ 1 "0". Bằng cách gọi $ {10}, bạn đang hướng dẫn bash xem xét biến hoàn chỉnh thay vì biến mặc định được tạo sẵn của chữ số đầu tiên.

Tại sao lại là cách này? Tôi không có ý kiến. Việc triển khai kế thừa đã được mở rộng theo dự đoán của tôi. "Ai sẽ cần nhiều hơn ....?"

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