我有一个 shell 脚本,我想使用最后一个参数:
#!/bin/bash
echo My last param is #somehow put it here
这是我尝试过的:
echo $$#
echo ${$#}
echo ${(($#))}
不幸的是,它没有用。
我特别想了解为什么我的选择不起作用,我想做一些类似双重扩展的事情。
从更广泛的意义上说,我想知道如何从最后访问第 N 个参数。我该如何做到这一点?
我有一个 shell 脚本,我想使用最后一个参数:
#!/bin/bash
echo My last param is #somehow put it here
这是我尝试过的:
echo $$#
echo ${$#}
echo ${(($#))}
不幸的是,它没有用。
我特别想了解为什么我的选择不起作用,我想做一些类似双重扩展的事情。
从更广泛的意义上说,我想知道如何从最后访问第 N 个参数。我该如何做到这一点?
要从
bash
脚本中获取任何参数,您可以使用切片:您还可以使用它来获取第 N 个元素:
记得检查长度;这可能会返回您的程序名称或空字符串。
在
bash
(4.3+ 版)中,您可以将传递的参数分配给数组并通过索引访问最后一个-1
:通常,数组的负索引从数组末尾访问元素。
可移植
sh
的,不是特定于 bash 的,并且没有 O(n) 循环:-1
产生倒数第二个论点;将其替换为您想要的相对于末尾的位置,或者如果您想要最后一个位置,则将其完全删除。此外(对 Kusalananda 的回答):
如果您担心便携性:
POSIX shell(也适用于 ksh、zsh 或 bash)的经典解决方案是:
对于较新的 shell(ksh93、zsh、bash):
仅适用于:
bash
echo "last=${!#}"
bash
echo "last=$BASH_ARGV"
zsh
echo "last=${@[-1]}"
zsh
echo "last=${@[#]}"
对于倒数第二个论点:
在 zsh 中,我认为最自然的事情是: