Why does getopts only work the first time?

南楼画角 提交于 2019-11-26 08:35:53

问题


Why does this option only work the first time it\'s used, then ignored every other time? It\'s like it\'s being reset when the option is not used.

Here\'s my function:

testopts() {
    local var=\"o false\"
    while getopts \"o\" option; do
        case \"${option}\" in
            o)
                var=\"o true\"
                ;;
        esac
    done
    echo $var
}

When running it, it only returns true when passing the option for the first time.

$ testopts
o false
$ testopts -o
o true
$ testopts -o
o false

回答1:


You need to add this line at top of your function:

OPTIND=1

Otherwise successive invocation of the function in shell are not resetting this back since function is being run in the same shell every time.

As per help getopts:

Each time it is invoked, getopts will place the next option in the shell variable $name, initializing name if it does not exist, and the index of the next argument to be processed into the shell variable OPTIND. OPTIND is initialized to 1 each time the shell or a shell script is invoked.



来源:https://stackoverflow.com/questions/41643352/why-does-getopts-only-work-the-first-time

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!