[root@GO-EMAIL-1 ~]# cat 1.sh
#!/bin/bash
echo $*
while getopts "ab:cd:" Option
# b and d take arguments
#
do
case $Option in
a) echo -e "a = $OPTIND";;
b) echo -e "b = $OPTIND $OPTARG";;
c) echo -e "c = $OPTIND";;
d) echo -e "d = $OPTIND $OPTARG";;
esac
done
shift $(($OPTIND - 1))
[root@GO-EMAIL-1 ~]# sh 1.sh -ab foo
-ab foo
a = 1
b = 3 foo

 

1.-ab是如何理解的,是一个option还是2个option
2.在这里a) echo -e "a = $OPTIND";; 应该是2吧!为什么是1呢?

 

$OPTIND总是存储原始$*中下一个要处理的元素位置, 这句话是这样理解的。
[root@GO-EMAIL-1 ~]# sh 1.sh -ab foo
sh 1.sh  -ab foo   
-ab  第一个元素,OPTIND=1
foo  第2个元素, OPTIND=2
第3个元素为空   OPTIND=3
所以处理 -a 时,下一个是 b,依然在处理第一个元素,所以打印
a=1
处理b时,下一个是foo,但foo不是参数SKIP掉了,下一个参数是空,optind=3
所以打印
b=3