【问题标题】:Why 'getopts' within a function fails to work?为什么函数中的“getopts”不起作用?
【发布时间】:2012-05-14 07:59:23
【问题描述】:
function readArgs() {
    while getopts "i:o:p:s:l:m" OPTION; do
        case "$OPTION" in
            i)
                input="$OPTARG"
                ;;
            o)
                output="$OPTARG"
                ;;
            ...
        esac
    done
}

readArgs

if [[ -z "$input" ]]; then
    echo "Not set!"
fi

这总是给我Not set!,但如果我注释掉function readArgs() {}readArgs 行,它就可以工作。为什么?

还有,

input="$OPTARG"
echo "$input"
;;

不工作。

【问题讨论】:

    标签: bash ubuntu


    【解决方案1】:

    getopts 依赖于被初始化为 1 的 OPTIND 变量。要么这样做

    readArgs() { OPTIND=1; ...
    

    readArgs() { local OPTIND; ...
    

    【讨论】:

    • 只有在多次调用该函数时才需要这样做。
    • OP没有描述函数的容器。我将这些方法用于我在 .bashrc 中编写的函数
    • 虽然这个答案没有直接回答 OPs 的问题,但它确实会搜索为什么 getopts 在函数中不起作用,并且在调试我的代码时非常有用(也适用于我的 .bashrc)
    【解决方案2】:

    getopts 正在解析readArgs 函数的参数,而您没有为该函数提供任何参数。

    尝试:

    readArgs "$@"
    

    【讨论】:

      猜你喜欢
      • 2014-08-06
      • 2015-02-20
      • 2021-08-20
      • 2021-07-25
      • 2013-08-26
      • 2011-11-13
      • 2023-03-15
      • 2021-08-26
      • 1970-01-01
      相关资源
      最近更新 更多