基本上,我希望能够在bash脚本中调用$ *,以在调用脚本后表示所有参数,但我希望它忽略前两个。 ($ 1和$ 2)
因此,为了简单起见,如果所有脚本都只是回显参数,那么它应该是这样的:
$ myscript.sh first_argument second_argument foo bar baz blah blah etc
foo bar baz blah blah etc
有一种简单的方法吗?顺便说一下,第一个和第二个参数之后的文本数量应该没有限制,如果知道了这个数量,我可以轻松地单独调用它们,比如$ 3 $ 4 $ 5 $ 6 ......
我希望这很清楚。
谢谢,
凯文
答案 0 :(得分:7)
您可以使用数组切片的变体来挑选一系列参数。要打印3中的参数,请使用:
echo "${@:3}"
与基于shift
的选项不同,这不会为了其他目的搞乱参数列表。
答案 1 :(得分:5)
使用shift
:
#!/bin/sh
shift 2
echo $@
./myscript A B C D
输出C D
。
如果参数少于2个,则会失败,请使用$#
进行检查。
这是一个相当全面的documentation of shift。
答案 2 :(得分:0)
可能shift会帮助你。
答案 3 :(得分:0)
在这里,你将除了前两个之外的所有args放在一个数组中,然后你可以循环或者其他。
#!/bin/bash
declare -a args
count=1
index=1
for arg in "$@"
do
if [ $count -gt 2 ]
then
args[$index]=$arg
let index=index+1
fi
let count=count+1
done
for arg in "${args[@]}"
do
echo $arg
done