Trong khi cố gắng để có được tham số vị trí cuối cùng được đặt /bin/dash, tôi đã thử echo ${$#}. Đáng ngạc nhiên là điều này không gây ra lỗi, nhưng vào PID giống như $$nội dung biến. Câu hỏi, tại sao cú pháp đó làm việc? Quy tắc cú pháp mà shell áp dụng ở đây là gì?
Về cơ bản, những gì tôi đã làm là
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
Rõ ràng, %nhân vật cũng bị bỏ qua trong cấu trúc như vậy
$ echo ${$%}
13819
Nhưng *và @dẫn đến lỗi thay thế xấu:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
#và %kết quả hành vi từ những người đó.
eval, ví dụ dash -c 'set 1 2 3 4 5; eval "echo \$$#"'. Nguồn: Ubuntu Wiki
for i; do true; doneđể có được mục cuối cùng $i) nhưng đang tìm kiếm một thứ gì đó thanh lịch hơn. evaltất nhiên có thể có những vấn đề tiềm ẩn, được nghĩ đến mức độ nào - đó là một chủ đề khác. Nhưng vâng, đó là một lựa chọn
${$*}và${$@}sản xuất?