когда я использую 'while getopts d: n: OPTION' - как я знаю, что у меня есть только недопустимая опция, и если да, то после этого есть аргумент?getopts в программировании bash
ответ
Вы знаете, что у вас есть недопустимая опция, потому что возвращаемое значение равно??.
Либо:
- Вы не можете сказать, был ли это аргумент, потому что вариант был признан недействительным.
Или:
- Вы должны смотреть на следующий аргумент и увидеть, начинает ли он с тире.
Эвристика в опции «Или» несовершенна. С опцией комплектацией, я мог бы написать:
command -xbf/fidget
- Если getopts опция строка
'xf:'
, то «Ь» является неверным вариантом. - Если строка опций getopts равна
'xbf:'
, тогда будет опция «f» и аргумент параметра «/ fidget» после действительной опции «b». - Если строка опций getopts равна
'xb:f:
', то аргументом параметра для' b 'будет' f/fidget '.
Я думаю, что отношение «либо» является правильным - вы не можете сказать.
фрагмента кода из команды под названием «rcsunco» - отменить RCS извлечения (и написано в то время, когда я неохотно трогание SCCS):
remove=yes
keep=no
get=no
quiet=
while getopts gknqrV opt
do
case $opt in
V) echo "`basename $0 .sh`: RCSUNCO Version $Revision: 2.1 $ ($Date: 2002/08/03 07:41:00 $)" |
rcsmunger
exit 0;;
g) get=yes;;
k) keep=yes;;
n) remove=no;;
q) quiet=-q;;
r) remove=yes;;
*) echo "Usage: `basename $0 .sh` [-{n|g}][-{r|k}] file [...]" 1>&2
exit 1;;
esac
done
shift $(($OPTIND-1))
В эти дни, я использовал нотация «сбалансированных скобок» в «случае»:
(q) quiet=-q;;
Также обратите внимание, что я явно не проверить, какой вариант возвращается - я позволяю Catchall «*» случай сделки. Я также замечаю, что сообщение об использовании не является полным (нет документа «-V» или «-q»), и код достаточно старый, что я не добавил параметр «-h» для справки. Сценарий «rcsmunger» заменяет «$Revision 2.1 $
» только с «2.1
», больше похоже на то, как SCCS заменяет «% I%» на «2.1».
недопустимый вариант будет иметь знак вопроса? ... обработка IIRC из командной строки аргументов обработки стоп, если есть знак вопроса ...
oh..i см .. большое спасибо за помощь – sagi