2013-11-26 4 views
1

Есть сценарий с getopts. Она включает в себя следующий:Bash: getopts - опция игнорирования?

while getopts "hlcpx:" opt; do 
    case $opt in 
    h) 
     usage && exit 1 
     ;; 
    l) 
     last=1 
     current="" 
     ;; 
    c) 
     current=1 
     last="" 
     ;; 
    p) 
     prints=1 
     exports="" 
     ;; 
    x) 
     exports=1 
     prints="" 
     ;; 
    \?) 
     usage && exit 1 
     ;; 
    esac 
done 

echo "Using: current=$current last=$last prints=$prints exports=$exports" 

Но - когда я запускаю его с вариантами -x и -c я получил:

$ ./version.sh -x -l 
Using: current= last= prints= exports=1 

$ ./version.sh -x -c 
Using: current= last= prints= exports=1 

Если удалить : - он работает правильно:

$ cat version.sh | grep whil 
while getopts "hlcpx" opt; do 

$ ./version.sh -x -c 
Using: current=1 last= prints= exports=1 

$ ./version.sh -x -l 
Using: current= last=1 prints= exports=1 

Я «Неправильно? Благодарю.

ответ

4

getopts работает так, как задумано. Если вам не нужно передавать параметр в параметр -x, не добавляйте : в x в строку опций getopts.

В качестве альтернативы, используйте скрипт с ожидаемым синтаксисом, например:

./version.sh -x foo -c 
+1

К сожалению, я идиот: D Я действительно не нужно требовать $ OPTARG вообще. – setevoy

 Смежные вопросы

  • Нет связанных вопросов^_^