从函数调用 bash getopts 第二次失败

从函数调用 bash getopts 第二次失败

我正在尝试function使用getopts该函数内部解析传递给 bash 的参数。它在第一次调用该函数时有效,但在所有后续调用中都失败。

这是一个简单的测试用例:

#!/bin/bash

function getopt_test {
    PARAMS=""
    while getopts "a:" opt; do
        case $opt in
            a)
                PARAMS="${PARAMS} $OPTARG"
                ;;
        esac
    done
    echo "PARAMS => $PARAMS"
}

getopt_test -a call_1
getopt_test -a call_2

脚本的输出是这样的:

~$ ./tst.sh
PARAMS =>  call_1
PARAMS =>               <--- missing 'call_2'
~$ 

我想getopts在第二次调用之前应该以某种方式重置,但我真的不知道如何重置。有任何想法吗?

答案1

答案是getopts保留指针$OPTIND,因此技巧是将local OPTINDor添加OPTIND=1到函数的开头getopt_test

感谢@sivann 提供链接getopts 不会连续调用两次吗?在 StackOverflow 上

相关内容