bash getopts use uma variável de ambiente OPTIND para acompanhar o último argumento processado. O fato de que OPTIND
não foi redefinido automaticamente sempre que você chamou getopts
na mesma sessão de shell, somente quando o shell foi chamado. Então, da segunda vez que você chamou getopts
com os mesmos argumentos na mesma sessão, OPTIND
não foi alterado, getopts
achou que tinha feito o trabalho e não fez nada.
Você pode redefinir o OPTIND
manualmente para que funcione:
$ OPTIND=1
$ f -a 123
-a was triggered, Parameter: 123
ou apenas coloque a função em um script e chame o script várias vezes.
zsh getopts é um pouco diferente. OPTIND
foi normalmente redefinido para 1 a cada vez que sair da função shell.