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>