(Аналогично этому, но в bash.)
У меня есть существующий сценарий bash, который использует встроенную функцию getopts для распознавания -s
(только флаг - без аргумента). Я обнаружил, что использую этот параметр каждый раз, поэтому я хотел бы сделать его по умолчанию, если -s-
или +s
не указано в командной строке. Однако, хотя ksh getopts
может обрабатывать +s
, я не могу найти эту возможность в руководстве по bash getopts
.
Мои текущие обходные пути:
- использовать
s:
, чтобы я мог распознать-s-
по$OPTARG
="-"
; или - чтобы заменить
-s
другим вариантом, например,-d
(для "нельзя").
Однако проблема #1 состоит в том, что он проглатывает следующий аргумент, если я случайно укажу -s
, а проблема #2 состоит в том, что он использует другую букву переключения, отличную от той, которая уже есть в моей мышечной памяти. Я надеюсь, что может быть простой способ разобрать -s-
или +s
в bash.
- util-linux getopt(1) также не отображается иметь
+s
. Он может обрабатывать необязательные аргументы, поэтому может принимать-s-
. Тем не менее, я не использовалgetopt(1)
раньше, поэтому был бы признателен за подсказки о том, как не выстрелить себе в ногу. - BashFAQ 035 говорит: "Проанализируйте сами". если у вас уже есть написанная подпрограмма, которая выполняет
+s
или-s-
, я бы хотел ее увидеть.
Мой текущий цикл разбора аргументов очень прост:
while getopts "nthps" opt ; do
case "$opt" in
<other cases cut>
(s) saw_s="yes"
;;
esac
done
shift $((OPTIND-1))