Tôi muốn lấy phần tử cuối cùng của $*
. Điều tốt nhất tôi đã tìm thấy cho đến thời điểm này là:zsh: truy cập đối số dòng lệnh cuối cùng được đưa ra cho tập lệnh
last=`eval "echo \\\$$#"`
Nhưng điều đó có vẻ quá mờ đục.
Tôi muốn lấy phần tử cuối cùng của $*
. Điều tốt nhất tôi đã tìm thấy cho đến thời điểm này là:zsh: truy cập đối số dòng lệnh cuối cùng được đưa ra cho tập lệnh
last=`eval "echo \\\$$#"`
Nhưng điều đó có vẻ quá mờ đục.
Trong zsh, bạn có thể sử dụng P
parameter expansion flag hoặc điều trị @
như một mảng chứa các tham số vị trí:
last=${(P)#}
last=${@[$#]}
Một cách làm việc trong tất cả các vỏ Bourne-phong cách bao gồm zsh là
eval last=\$$#
(Bạn đang đi đúng hướng, nhưng chạy echo
chỉ để có được đầu ra là vô nghĩa.)
last=${@[-1]}
nên thực hiện thủ thuật. Tổng quát hơn,
${@[n]}
sẽ mang lại * n * tham số thứ, trong khi
${@[-n]}
sẽ mang lại * n * thứ để tham số cuối cùng.
Việc mở rộng tham số thư đại tràng không có trong POSIX, nhưng hoạt động này trong ít nhất zsh, bash, và ksh:
${@:$#}
Khi không có đối số, ${@:$#}
được coi là $0
trong zsh và ksh nhưng như trống trong bash:
$ zsh -c 'echo ${@:$#}'
zsh
$ ksh -c 'echo ${@:$#}'
ksh
$ bash -c 'echo ${@:$#}'
$