为什么此选项仅在第一次使用时有效,然后每隔一次就被忽略?就像不使用该选项时正在重置一样。
这是我的功能:
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。
Run Code Online (Sandbox Code Playgroud)$ testopts o false $ testopts -o o true $ testopts -o o false
您需要在函数顶部添加此行:
OPTIND=1
Run Code Online (Sandbox Code Playgroud)
否则,在 shell 中连续调用函数不会重置它,因为函数每次都在同一个 shell 中运行。
根据help getopts:
每次调用时,
getopts都会将下一个选项放在shell变量中$name,如果不存在则初始化name,下一个要处理的参数的索引到shell变量中OPTIND。每次调用 shell 或 shell 脚本时都会被OPTIND初始化1。