问题
Why does this option only work the first time it\'s used, then ignored every other time? It\'s like it\'s being reset when the option is not used.
Here\'s my function:
testopts() {
local var=\"o false\"
while getopts \"o\" option; do
case \"${option}\" in
o)
var=\"o true\"
;;
esac
done
echo $var
}
When running it, it only returns true when passing the option for the first time.
$ testopts o false $ testopts -o o true $ testopts -o o false
回答1:
You need to add this line at top of your function:
OPTIND=1
Otherwise successive invocation of the function in shell are not resetting this back since function is being run in the same shell every time.
As per 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.
来源:https://stackoverflow.com/questions/41643352/why-does-getopts-only-work-the-first-time