bash getopts 如何知道调用有哪些参数

bash getopts 如何知道调用有哪些参数

如果getopts是 bash 函数,根据我的理解,您需要传递$@- 整个参数以便getopts让函数知道您有什么样的参数才能继续,对吗?

在我看来,你不需要它,那么如何getopts知道我在当前范围内有哪些参数呢?它是否有办法像其他高级语言一样跟踪先前的调用?

while getopts abcde opt; do
              ˄˄˄˄˄ <-- you only need to pass the argument labels here, 
                        how getopts knows what arguments I have
    case $opt in
        ...
    esac
done

答案1

getopts是shell内置的,所以可以$@直接引用。它还设置 shell 变量OPTARGOPTIND。 (请注意,在函数内部,getopts将引用该函数而不是全局参数。如果您想要可重复(幂等)函数调用,则$@应该本地化。)OPTIND

概要(摘要)是

getopts optstring name [arg ...]

并且描述是这样的,

getopts shell 程序使用它来解析位置参数。optstring包含要识别的选项字符;如果一个字符后面跟着一个冒号,则该选项应该有一个参数,该参数应该用空格与其分隔。

请注意(至少)bash文档 ( man bash) 还指出,

getopts通常解析位置参数,但如果提供更多参数作为 arg 值,getopts则解析这些参数。

参考

相关内容