我想获得$*
的最后一个元素。到目前为止我发现的最好的是:
last=`eval "echo \\\$$#"`
但这似乎过于透明。
答案 0 :(得分:8)
在zsh中,您可以使用P
parameter expansion flag或将@
视为包含位置参数的数组:
last=${(P)#}
last=${@[$#]}
适用于所有Bourne样式shell(包括zsh)的方法是
eval last=\$$#
(你在正确的轨道上,但只是为了获得它的输出而运行echo
毫无意义。)
答案 1 :(得分:8)
last=${@[-1]}
应该做的伎俩。更一般地说,
${@[n]}
将产生* n * th参数,而
${@[-n]}
将产生* n * th到最后一个参数。
答案 2 :(得分:0)
冒号参数扩展不在POSIX中,但至少在zsh,bash和ksh中起作用:
${@:$#}
如果没有参数,${@:$#}
在zsh和ksh中被视为$0
,但在bash中被视为空:
$ zsh -c 'echo ${@:$#}'
zsh
$ ksh -c 'echo ${@:$#}'
ksh
$ bash -c 'echo ${@:$#}'
$