处理除第一个参数以外的所有参数(在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个参数),然后实现批量使用(查找带有该标题的标题)。
上一篇: Process all arguments except the first one (in a bash script)