Zsh - 传递给 Shell 脚本的最后一个参数?

Zsh - 传递给 Shell 脚本的最后一个参数?

如何在 zsh shell 中获取传递给 shell 脚本的最后一个参数?

$ example.zsh  arg1 arg2 ...  arglast
last argument is "arglast"

答案1

@工作原理主要类似于包含位置参数数组的变量:$@可以采用数组下标。最后一个元素位于位置,$#因为$#是参数的数量²。

printf 'Last argument is "%s"\n' "${@[$#]}"

或者,在数组下标,负值从末尾开始计数,因此[-1]取最后一个元素。

printf 'Last argument is "%s"\n' "$@[-1]"

获取最后一个参数的另一种方法是使用P参数扩展标志它进行两次参数查找:${(P)foo}将 的值foo作为另一个参数名称并扩展到该值。使用此功能#它的工作原理类似于包含位置参数数量的变量。但请注意,这仅在至少有一个位置参数时才有效,否则您将得到$0(当前脚本的名称)。使用@数组就不存在这个问题。

printf 'Last argument is "%s"\n' "${(P)#}"

¹不同之处在于$@有一个隐含的@参数扩展中的标志,以便将"$@""$@[1,3]"扩展到多个单词,例如"$array[@]""${(@)array[1,3]}"
² Zsh 从 1 开始计算位置参数和数组元素(除非ksh_arrays兼容性选项打开,在这种情况下,数组元素从 0 开始计数,最后一个元素将为${@[${#}-1]})。

相关内容