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

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

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

echo "${@: -1}"

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

echo "${@:2}"

要么

echo "${@:2,1}"

我从终端上得到“坏代换”。

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


用这个:

echo "${@:2}"

以下语法:

echo "${*:2}"

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


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

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个参数),然后实现批量使用(查找带有该标题的标题)。

链接地址: http://www.djcxy.com/p/17527.html

上一篇: Process all arguments except the first one (in a bash script)

下一篇: What's the difference between [ and [[ in Bash?