处理除第一个之外的所有参数(在bash脚本中)

我有一个简单的脚本,第一个参数是为文件名保留的,所有其他可选参数都应该传递给脚本的其他部分。

使用谷歌我发现这个wiki ,但它提供了一个字面的例子:

echo "${@: -1}" 

我无法得到任何其他工作,如:

 echo "${@:2}" 

要么

 echo "${@:2,1}" 

我从terminal得到“坏代换”。

什么问题,我怎样才能处理除了传递给bash脚本的第一个参数?

用这个:

 echo "${@:2}" 

以下语法:

 echo "${*:2}" 

也会起作用,但不推荐,因为@Gordon已经解释过,使用* ,它将所有参数作为一个单独的参数与空格一起运行,而@保留它们之间的中断(即使某些参数本身包含空格)。 这与echo没有区别,但是对于许多其他命令来说,它是重要的。

如果你想要一个也可以在/bin/sh运行的解决scheme

 first_arg="$1" shift echo First argument: "$first_arg" echo Remaining arguments: "$@" 

shift [n]将位置参数移位n次。 一个shift$1的值设置为$2的值,将$2的值设置为$3的值,依此类推,将$#的值$# 1。

http://wiki.bash-hackers.org/scripting/posparams

它解释了shift的使用(如果你想放弃前N个参数),然后实现批量使用(查找标题的标题)。