($@) 扩展为位置参数,从 1 开始。
如何获取位置参数,从两个或更一般的开始n
?
我想使用从两个开始的位置参数作为命令的参数,例如,
myCommand $@
答案1
对于从第 5 个开始的位置参数:
zsh
或者yash
。myCommand "${@[5,-1]}"
(一如既往,请注意,上面的引号很重要,否则每个元素都将受到 split+glob 的约束
yash
,或者删除 中的空元素zsh
)。ksh93
,bash
或者zsh
:myCommand "${@:5}"
(再次强调,引号很重要)
Bourne-like shell(包括所有上述 shell)
(shift 4; myCommand "$@")
(使用子外壳所以转移只发生在那里)。
类似 csh 的 shell:
(shift 4; myCommand $argv:q)
(子外壳)
fish
:myCommand $argv[5..-1]
rc
:@{shift 4; myCommand $*}
(子外壳)
rc
/es
:myCommand $*(`{seq 5 $#*})
es
:myCommand $*(5 ...)
答案2
$ foo=(1 2 3 4)
$ echo "${foo[@]}"
1 2 3 4
$ echo "${foo[@]:0:2}"
1 2
echo "${foo[@]:2}"
3 4