$1是第一个参数。 $@是全部。
如何找到传递给shell的最后一个参数 脚本?
$1是第一个参数。 $@是全部。
如何找到传递给shell的最后一个参数 脚本?
当前回答
使用结合长度的索引:
echo ${@:${#@}}
注意,这是bash专用的。
其他回答
下面将在不改变当前环境的情况下将LAST设置为最后一个参数:
LAST=$({
shift $(($#-1))
echo $1
})
echo $LAST
如果其他参数不再需要并且可以被转移,则可以简化为:
shift $(($#-1))
echo $1
出于便携性的考虑:
shift $(($#-1));
可替换为:
shift `expr $# - 1`
同样用反引号替换$(),我们得到:
LAST=`{
shift \`expr $# - 1\`
echo $1
}`
echo $LAST
以下是我的解决方案:
相当可移植(所有POSIX sh, bash, ksh, zsh)应该工作 不移位原始参数(移位副本)。 不使用恶eval 不是遍历整个列表 不使用外部工具
代码:
ntharg() {
shift $1
printf '%s\n' "$1"
}
LAST_ARG=`ntharg $# "$@"`
echo $argv[$#argv]
现在我只需要添加一些文字,因为我的回答太短了。我需要添加更多的文字来编辑。
这是在将最后一个参数与所有前一个参数分开时发现的。 虽然有些答案确实得到了最后一个参数,但如果你还需要所有其他参数,它们就没有多大帮助了。这样做效果更好:
heads=${@:1:$#-1}
tail=${@:$#}
注意,这是bash专用的。
对于bash 3.0或更高版本,最简单的答案是
_last=${!#} # *indirect reference* to the $# variable
# or
_last=$BASH_ARGV # official built-in (but takes more typing :)
就是这样。
$ cat lastarg
#!/bin/bash
# echo the last arg given:
_last=${!#}
echo $_last
_last=$BASH_ARGV
echo $_last
for x; do
echo $x
done
输出是:
$ lastarg 1 2 3 4 "5 6 7"
5 6 7
5 6 7
1
2
3
4
5 6 7