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. eval
tấ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?