为什么此选项仅在第一次使用时才起作用,然后每隔一段时间忽略一次?就像在没有使用该选项时重置它一样。
这是我的功能:
testopts() {
local var="o false"
while getopts "o" option; do
case "${option}" in
o)
var="o true"
;;
esac
done
echo $var
}
运行时,只有在第一次传递选项时才返回true。
$ testopts o false $ testopts -o o true $ testopts -o o false
答案 0 :(得分:3)
您需要在功能顶部添加此行:
OPTIND=1
否则在shell中连续调用函数不会重置此函数,因为函数每次都在同一个shell中运行。
根据help getopts
:
每次调用它时,
getopts
都会将下一个选项放入 shell变量$name
,如果名称不存在则初始化名称,以及 要处理到shell中的下一个参数的索引 变量OPTIND
。每次shell或者OPTIND
初始化为1
调用shell脚本。
答案 1 :(得分:0)
将 OPTIND
重置为 1
是可行的,但在函数中使用 OPTIND
时,最好将 getopts
声明为局部变量。