$1是第一个参数。 $@是全部。

如何找到传递给shell的最后一个参数 脚本?


当前回答

GNU bash版本>= 3.0:

num=$#                 # get number of arguments
echo "${!num}"         # print last argument

其他回答

如果你使用的是Bash >= 3.0

echo ${BASH_ARGV[0]}

这是一个小hack:

for last; do true; done
echo $last

这也是非常可移植的(同样,应该与bash、ksh和sh一起工作),并且它不改变参数,这可能很好。

它利用了这样一个事实:如果你不告诉它循环什么,for会隐式地遍历参数,而且for循环变量没有作用域:它们保持它们设置的最后一个值。

我发现@AgileZebra的答案(加上@starfry的评论)最有用,但它将头设置为一个标量。数组可能更有用:

heads=( "${@: 1: $# - 1}" )
tail=${@:${#@}}

注意,这是bash专用的。

编辑:根据@f-hauri的评论删除了不必要的$(())。

要返回最近使用的命令的最后一个参数,请使用特殊形参:

$_

在这个实例中,如果在调用另一个命令之前在脚本中使用它,那么它将工作。

#! /bin/sh

next=$1
while [ -n "${next}" ] ; do
  last=$next
  shift
  next=$1
done

echo $last