关于shell:处理除第一个参数以外的所有参数(在bash脚本中)

Process all arguments except the first one (in a bash script)

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

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

1
echo"${@: -1}"

我不能让其他东西去工作,比如:

1
echo"${@:2}"

1
echo"${@:2,1}"

我从终点站得到了"坏的替代品"。

问题是什么,除了传递给bash脚本的第一个参数之外,我如何处理其他所有参数?


使用此:

1
echo"${@:2}"

以下语法:

1
echo"${*:2}"

也可以,但不建议这样做,因为正如@gordon已经解释过的那样,使用*,它将所有参数作为带空格的单个参数一起运行,而@保留它们之间的分隔符(即使某些参数本身包含空格)。它与echo没有什么区别,但它对许多其他命令很重要。


如果你想要一个同样适用于/bin/sh的解决方案,试试看。

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

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


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

它解释了shift的使用(如果您想放弃前n个参数),然后实现大规模使用(查找标题为该标题的标题)。