我制作了一个名为test.sh的脚本,如下所示
while getopts a:b: opt
do
case $opt in
a) a1=$OPTARG
;;
b) b1=$OPTARG
eval "b2=\${$OPTIND}"
shift 2;;
esac
done
echo $a1;
echo $b1;
echo $b2;
当我尝试下面的命令时,它的工作......
test.sh -a 111 -b 222 333
111
222
333
但如果我尝试这个......
test.sh -b 222 333 -a 111
222
333
它只能显示-b参数,-a选项和agrument在-b选项之后无效...
我脚本上的任何问题???? 谢谢你:))
答案 0 :(得分:1)
使用shift 2
修改参数索引不会与getopts
一起使用。相反,您应该将OPTIND
增加1以使getopts
跳过下一个参数,例如
while getopts a:b: opt
do
case $opt in
a) a1=$OPTARG
;;
b) b1=$OPTARG
eval "b2=\${$OPTIND}"
OPTIND=`echo $OPTIND + 1 | bc`
;;
esac
done
echo $a1;
echo $b1;
echo $b2;