У меня возникли проблемы с тем, как заставить getopts принимать несколько флагов с одним аргументом. Например.Bash getopts несколько флагов с одним обязательным параметром
Флаги: Дети: а - Адам б - Beth гр - Cathy г - Дункан
Обязательный параметр: вкус мороженого
(не то, что мой сценарий на самом деле делает, но проще всего сформулировать таким образом)
Что я могу сделать прямо сейчас:
./flavor -a chocolate
./flavor -c chocolate
То, что я хотел бы сделать:
./flavor -acd chocolate
Вместо того, единственное, что я могу заставить его сделать до сих пор:
./flavor -a chocolate -c chocolate -d chocolate
Каждый вариацию я попытался с getopts либо не видит параметр вообще или требует его после каждого флага декларация. Я чувствую, что мне не хватает чего-то очевидного, что даст мне момент «ага», но я не вижу его сам. Может кто-то указать мне верное направление?
============================================
while getopts ":a:b:c:d:" opt; do
case $opt in
a)
do stuff with $OPTARG
;;
b)
do stuff with $OPTARG
;;
c)
do stuff with $OPTARG
;;
d)
do stuff with $OPTARG
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
================================
Приносим извинения, если это действительно глупый вопрос и спасибо за ваше время.
Вам ничего не хватает; не существует способа указать, что один аргумент должен быть разделен всеми параметрами в группе. – chepner
Я считаю, что вы не можете этого сделать, но я могу ошибаться. С './flavor -acd' ** a ** будет потреблять ** cd ** в качестве' $ OPTARG'. – sjsam