如何在“$ *”中排除bash输入参数

时间:2011-07-22 19:01:47

标签: bash variables arguments

基本上,我希望能够在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 ......

我希望这很清楚。

谢谢,

凯文

4 个答案:

答案 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