我正在尝试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 OPTIND
or添加OPTIND=1
到函数的开头getopt_test
。
感谢@sivann 提供链接getopts 不会连续调用两次吗?在 StackOverflow 上