getopts bash используют переменную среды OPTIND для отслеживания последнего обработанного аргумента опции. Тот факт, что OPTIND
не сбрасывался автоматически каждый раз, когда вы вызывали getopts
в том же сеансе оболочки, а только при вызове оболочки. Итак, когда вы второй раз вызвали getopts
с теми же аргументами в том же сеансе, OPTIND
не был изменен, getopts
думали, что они выполнили свою работу и ничего не сделали .
Вы можете сбросить OPTIND
вручную, чтобы заставить его работать:
$ OPTIND=1
$ f -a 123
-a was triggered, Parameter: 123
или просто поместите функцию в скрипт и вызовите скрипт несколько раз.
zsh getopts немного отличается. OPTIND
обычно сбрасывался в 1 каждый раз при выходе из функции оболочки.