【问题标题】:how to pass parameters to Bash getopts using a custom variable as opposed to ${1}, ${2} etc如何使用自定义变量而不是 ${1}、${2} 等将参数传递给 Bash getopts
【发布时间】:2014-01-12 05:37:31
【问题描述】:

我想在 Bash 变量中指定参数(选项和参数)并将该变量传递给 getopts 进行解析,而不是通常的变量 ${1}${2} 等。我不知道该怎么做.通常在documentation for getopts 中,getopts 语法描述如下:

Syntax
    getopts optstring name [args]

我知道optstring 代表getopts 关于如何解析参数的说明,name 是一个变量,用于存储getopts 正在考虑的当前信息(例如选项参数的值),但我不知道[args] 是什么意思。是否可以在不使用标准命令行变量的情况下将参数传递给getopts?如果是,我怎么能使用这个设施?如果不是,那么将存储在空格分隔的 Bash 变量中的参数传递给getopts 的好方法是什么?谢谢!

【问题讨论】:

    标签: bash parameters arguments options getopts


    【解决方案1】:

    是的,可选的args 参数是一种传递自定义参数的方式。正如手册中所说:

    getopts 通常会解析位置参数,但如果 args 中给出了更多参数,getopts 会改为解析这些参数。

    所以如果你有一个数组:

    myargs=(arg1 arg2 arg3)
    

    你可以使用:

    getopts optstring name "${myargs[@]}"
    

    处理它们。

    例子:

    $ # Set positional parameters:
    $ set -- -a 1 -b
    $ getopts a:b var -a 2
    $ echo $var
    a
    $ echo $OPTARG
    2
    

    如您所见,它从我提供给命令 (2) 的参数中检索值,而不是外壳的位置参数 (1)

    【讨论】:

    • 非常感谢您的澄清。当我尝试这个时,getopts 似乎正在解释在命令行 和变量myargs 中指定的参数。我怎么能让getopts 只解释myargs 变量中的参数? (...或者,我如何将所有 ${1}、${2} 等变量设置为空?)
    • 可以使用set --清空位置参数
    • 我刚试了一下,它使用了我提供的参数,而不是脚本的位置参数
    • 我很抱歉。我犯了一个脚本错误。你说的很对。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2015-03-11
    • 2018-08-14
    • 2020-02-01
    相关资源
    最近更新 更多