Судя по справочной странице, это ожидаемое поведение. getopts
поддерживает «опции» и «аргументы опции -».
Рекомендация 4 :всем параметрам должен предшествовать -
. При этом ./getopts-test foo goo -a moo -b
не будет работать, так как «foo» не является ни опцией, ни аргументом опции -. Следовательно, он остановится.
Аргумент опции -определяется как " :". В вашем определении a:
является аргументом опции -, и он анализирует -a moo
, а b
просто и опция, которая анализирует -b
в ./getopts-test -a moo -b foo goo
. Остальные(foo goo
)просто остаются.
Рекомендация 8 :все аргументы для аргумента опции -должны быть представлены через одну запятую -через одну. Вот почему ./getopts-test -a moo foo goo -b
просто анализирует -a moo
. Правильный путь — ./getopts-test -a moo,foo,goo -b
. (то же самое относится и к вашему последнему делу)
Ссылка: