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

6

我想获取$*的最后一个元素。目前,我发现的最佳方法是:

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

但这似乎过于晦涩。
3个回答

11
在zsh中,你可以使用 P 参数扩展标志 或将 @ 视为包含位置参数的数组:
last=${(P)#}
last=${@[$#]}

适用于所有 Bourne 风格 shell,包括 zsh 的一种方法是:

eval last=\$$#

你的思路是正确的,但运行 echo 仅为了获取其输出是无意义的。


9
last=${@[-1]}

应该可以解决问题。更一般地说,
${@[n]}

将会返回第 *n* 个参数,而
${@[-n]}

将会返回倒数第n个参数。

0

冒号参数扩展不在POSIX中,但至少在zsh、bash和ksh中可以使用:

${@:$#}

当没有参数时,在zsh和ksh中,${@:$#}被视为$0,但在bash中为空:

$ zsh -c 'echo ${@:$#}'
zsh
$ ksh -c 'echo ${@:$#}'
ksh
$ bash -c 'echo ${@:$#}'

$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接