$1是第一个参数。 $@是全部。
如何找到传递给shell的最后一个参数 脚本?
$1是第一个参数。 $@是全部。
如何找到传递给shell的最后一个参数 脚本?
当前回答
下面的方法对你有用。
@是参数数组。 :表示at $#是参数数组的长度。
所以结果是最后一个元素:
${@:$#}
例子:
function afunction{
echo ${@:$#}
}
afunction -d -o local 50
#Outputs 50
注意,这是bash专用的。
其他回答
使用eval的解决方案:
last=$(eval "echo \$$#")
echo $last
GNU bash版本>= 3.0:
num=$# # get number of arguments
echo "${!num}" # print last argument
只需使用!$。
$ mkdir folder
$ cd !$ # will run: cd folder
使用结合长度的索引:
echo ${@:${#@}}
注意,这是bash专用的。
如果你想以一种非破坏性的方式来做,一种方法是将所有的参数传递给一个函数,并返回最后一个:
#!/bin/bash
last() {
if [[ $# -ne 0 ]] ; then
shift $(expr $# - 1)
echo "$1"
#else
#do something when no arguments
fi
}
lastvar=$(last "$@")
echo $lastvar
echo "$@"
pax> ./qq.sh 1 2 3 a b
b
1 2 3 a b
如果你实际上不关心保留其他参数,你不需要在函数中使用它,但我很难想出一种情况,你永远不会想要保留其他参数,除非它们已经被处理了,在这种情况下,我会使用process/shift/process/shift/…顺序处理它们的方法。
我假设你想保留它们因为你没有遵循顺序法。此方法还处理没有参数的情况,返回""。您可以通过插入注释掉的else子句轻松地调整这种行为。