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

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


当前回答

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

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

注意,这是bash专用的。

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

其他回答

以下是我的解决方案:

相当可移植(所有POSIX sh, bash, ksh, zsh)应该工作 不移位原始参数(移位副本)。 不使用恶eval 不是遍历整个列表 不使用外部工具

代码:

ntharg() {
    shift $1
    printf '%s\n' "$1"
}
LAST_ARG=`ntharg $# "$@"`
$ echo "${*: -1}"

这将打印最后一个参数

#! /bin/sh

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

echo $last

下面的方法对你有用。

@是参数数组。 :表示at $#是参数数组的长度。

所以结果是最后一个元素:

${@:$#} 

例子:

function afunction{
    echo ${@:$#} 
}
afunction -d -o local 50
#Outputs 50

注意,这是bash专用的。

使用参数展开(删除匹配的开头):

args="$@"
last=${args##* }

也很容易把所有的都放在最后:

prelast=${args% *}