【问题标题】:How to exclude bash input arguments in "$*"如何在“$*”中排除 bash 输入参数
【发布时间】:2011-10-11 07:25:34
【问题描述】:

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

我希望这很清楚。

谢谢,

凯文

【问题讨论】:

    标签: bash variables arguments


    【解决方案1】:

    您可以使用数组切片的变体来挑选出一系列参数。要打印从 3 开始的参数,请使用以下命令:

    echo "${@:3}"
    

    与基于shift 的选项不同,这不会因为其他目的而弄乱参数列表。

    【讨论】:

      【解决方案2】:

      使用shift:

      #!/bin/sh
      
      shift 2
      
      echo $@
      

      ./myscript A B C D 输出C D

      如果参数少于 2 个,这将失败,请使用 $# 进行检查。

      这里有一个比较全面的documentation of shift

      【讨论】:

      • 在您的答案中添加指向某些文档的链接,我将删除我的答案,因为您的答案更完整:)
      • 您无法删除已接受的答案...嘿,OP,他的答案真的更好!选择它:)
      【解决方案3】:

      shift 可能会帮助你。

      【讨论】:

        【解决方案4】:

        在这里,这会将除前两个之外的所有 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
        

        【讨论】:

        • 虽然 shift 选项看起来更简洁。 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        • 1970-01-01
        • 2011-02-06
        • 1970-01-01
        • 2017-10-13
        相关资源
        最近更新 更多