zsh:访问给脚本的最后一个命令行参数

时间:2011-09-20 23:57:05

标签: zsh

我想获得$*的最后一个元素。到目前为止我发现的最好的是:

 last=`eval "echo \\\$$#"`

但这似乎过于透明。

3 个答案:

答案 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 ${@:$#}'

$