getopts 的坑

getopts 真的比較坑啊。。。。語言描述不同,以下用例子來體現,對腳本文件 ./test.sh

#注意,選項一開始沒有冒號
while getopts ab:c OPT; do
   case $OPT in
       a) echo "a";;
       b) echo "b : $OPTARG";;
       c) echo "c";;
       \?) echo "wrong input";;
   esac
done</span>

此時。如果輸入是:
  ./test.sh -a -c -k -b

輸出將是:

> a

> c

> Illege args -k

> wrong input

> no arg for -b option

> wrong input

 -k 是非法選項,報錯後將OPT設置爲 ? 。-b 之後沒有選項值,則不符合要求,報錯後將OPT設置爲 ?


如果輸入是:

 ./test -a -b -c  

注意:輸出將是很坑的!!!!!!!!!!!!!

> a

> b : -c

這是 -b 選項將後面的 -c 選項當做了自己的值。。。然後就收了。然後也不報錯。。。。看到這裏心裏也是醉了


此外要注意,在指定 getopts 的選項參數之前如果有冒號。則整個過程變爲靜默模式,也就是該報錯的地方不報錯,直接將取到的選項設置爲 ? 號。(上面例子中的紅色全部不輸出)

#注意,選項一開始有冒號
while getopts :ab:c OPT; do
   case $OPT in
       a) echo "a";;
       b) echo "b : $OPTARG";;
       c) echo "c";;
       \?) echo "wrong input";;
   esac
done</span>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章