Я следующий простой код:Как игнорировать недопустимые аргументы с помощью getopts и продолжать синтаксический анализ?
#!/usr/bin/env bash
while getopts :f arg; do
case $arg in
f) echo Option $arg specified. ;;
*) echo Unknown option: $OPTARG. ;;
esac
done
и она работает в простых ситуациях, таких как:
$ ./test.sh -f
Option f specified.
$ ./test.sh -a -f
Unknown option: a.
Option f specified.
Однако это не работает следующим образом:
$ ./test.sh foo -f
$ ./test.sh -a abc -f
Unknown option: a.
Как исправить выше пример кода для поддержки недопустимых аргументов?
Что значит «поддерживать недопустимые аргументы»? 'getopts' останавливает синтаксический анализ при первом необязательном (например,' foo' или 'abc'). Что вы пытаетесь заставить его сделать? Не делать этого и разбирать все? –
Чтобы поддерживать недопустимые аргументы в терминах распознавания того, что '-f' был, несмотря на указание неизвестных аргументов, поэтому' -a abc -f' все равно распознает '-f', но похоже, что' getopts' останавливает обработку некорректным аргументом найден. – kenorb
Он останавливается при первом аргументе без опционов (т. Е. 'Abc'). '-a -a -a -a -f' будет печатать неизвестные четыре раза, например. –