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>