处理除第一个之外的所有参数(在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个参数),然后实现批量使用(查找标题的标题)。