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
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.