为什么 getopts 只在第一次工作?

Jef*_*ett 5 bash getopts

为什么此选项仅在第一次使用时有效,然后每隔一次就被忽略?就像不使用该选项时正在重置一样。

这是我的功能:

testopts() {
    local var="o false"
    while getopts "o" option; do
        case "${option}" in
            o)
                var="o true"
                ;;
        esac
    done
    echo $var
}
Run Code Online (Sandbox Code Playgroud)

运行它时,它仅在第一次传递选项时返回 true。

$ testopts
o false
$ testopts -o
o true
$ testopts -o
o false
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 6

您需要在函数顶部添加此行:

OPTIND=1
Run Code Online (Sandbox Code Playgroud)

否则,在 shell 中连续调用函数不会重置它,因为函数每次都在同一个 shell 中运行。

根据help getopts

每次调用时,getopts都会将下一个选项放在shell变量中$name,如果不存在则初始化name,下一个要处理的参数的索引到shell变量中OPTIND每次调用 shell 或 shell 脚本时都会被OPTIND初始化1