为什么 getopts 只在第一次起作用?
Why does getopts only work the first time?
为什么这个选项只在第一次使用时有效,然后每隔一段时间就被忽略了?好像在不使用该选项时正在重置。
这是我的函数:
testopts() {
local var="o false"
while getopts "o" option; do
case "${option}" in
o)
var="o true"
;;
esac
done
echo $var
}
当运行它时,只有在第一次传递选项时才returns为真。
$ testopts
o false
$ testopts -o
o true
$ testopts -o
o false
您需要在函数顶部添加这一行:
OPTIND=1
否则在 shell 中连续调用该函数不会将其重置,因为函数每次都在同一个 shell 中 运行。
根据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.
将 OPTIND
重置为 1
可行,但最好在函数中使用 getopts
时将 OPTIND
声明为局部变量。
为什么这个选项只在第一次使用时有效,然后每隔一段时间就被忽略了?好像在不使用该选项时正在重置。
这是我的函数:
testopts() {
local var="o false"
while getopts "o" option; do
case "${option}" in
o)
var="o true"
;;
esac
done
echo $var
}
当运行它时,只有在第一次传递选项时才returns为真。
$ testopts o false $ testopts -o o true $ testopts -o o false
您需要在函数顶部添加这一行:
OPTIND=1
否则在 shell 中连续调用该函数不会将其重置,因为函数每次都在同一个 shell 中 运行。
根据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 variableOPTIND
.OPTIND
is initialized to1
each time the shell or a shell script is invoked.
将 OPTIND
重置为 1
可行,但最好在函数中使用 getopts
时将 OPTIND
声明为局部变量。