getoptで複数のロングオプションだけを受けたい時

引数で複数のロングオプションを指定したい時のgetoptの指定の仕方がよくわからなかったので、
調べたり実験したりしてみた結果↓で出来るようになりました。

実行コマンド

batch/sample.sh --target=maker --env=stage

コード

OPT=`getopt -o "" -l target: -l env: -- "$@"`
if [ "$?" -ne 0 ]; then
  error "Usage: $0 [--target VALUE] [--env VALUE]"
fi
eval set -- "$OPT"
until [ "$1" == "--" ]; do
echo $1
  case $1 in
    --target)
      target=$2
      ;;
    --env)
      env=$2
      ;;
  esac
  shift
done

echolog log "target is : ${target}"
echolog log "environs is : ${env}"

ロングオプションしか指定出来ないようにしたかったんだけど、どうしても「-o "" 」の記述はいるみたい。
無くしたら解析結果が

--env 'stage' --

てなった。謎。

後複数のロングオプションを指定する場合、-lを複数指定しました。
manで見たらカンマで繋げばいけるって書いてあったから

OPT=`getopt -o "" -l target,env: -- "$@"`

って書いたけど、どうも
「getopt: オプション`--target'は引数をとりません」
って怒られた。
きっと書き方が悪かったんだろう。。。