オプション解析getoptsではまったこと
1,オプションの引数が受け取れない・$OPTARGに値が入らない
while getopts a:b:c OPT
do
case $OPT in
"a" ) echo "$OPTARG"
;;
"b" ) echo "$OPTARG"
;;
"c" ) echo "$OPTARG"
;;
esac
done
上記の場合、a,bには$OPTARGの値が入るがcには入らない。
× while getopts a:b:c OPT → ○ while getopts a:b:c: OPT
:コロンを横に付けることによって引数が必須になるっぽい。
2,getoptsを二回使う時
while getopts a:b: OPT
do
case $OPT in
"a" ) continue;;
"b" ) echo "$OPTARG";;
esac
done
while getopts a:b: OPT
do
case $OPT in
"a" ) echo "$OPTARG";;
"b" ) echo "$OPTARG";;
esac
done
上記のように二回使うとgetoptsが実行されない。
while getopts a:b: OPT
do
case $OPT in
"a" ) continue;;
"b" ) echo "$OPTARG";;
esac
done
OPTIND=1
while getopts a:b: OPT
do
case $OPT in
"a" ) echo "$OPTARG";;
"b" ) echo "$OPTARG";;
esac
done
間にOPTIND=1をつけて、ループを戻す必要がある。
OPTINDはループ開始位置を指定できる。
同じことで二回ハマったからメモった^^;