2010-03-21 4 views

ответ

4

Вы знаете, что у вас есть недопустимая опция, потому что возвращаемое значение равно??.

Либо:

  • Вы не можете сказать, был ли это аргумент, потому что вариант был признан недействительным.

Или:

  • Вы должны смотреть на следующий аргумент и увидеть, начинает ли он с тире.

Эвристика в опции «Или» несовершенна. С опцией комплектацией, я мог бы написать:

command -xbf/fidget 
  1. Если getopts опция строка 'xf:', то «Ь» является неверным вариантом.
  2. Если строка опций getopts равна 'xbf:', тогда будет опция «f» и аргумент параметра «/ fidget» после действительной опции «b».
  3. Если строка опций 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».

+0

oh..i см .. большое спасибо за помощь – sagi

0

недопустимый вариант будет иметь знак вопроса? ... обработка IIRC из командной строки аргументов обработки стоп, если есть знак вопроса ...