Why does getopts only work the first time?

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
variable OPTIND. OPTIND is initialized to 1 each time the shell or
a shell script is invoked.

Leave a Comment