getoptsではロングオプションは使えないということになっているが・・・
while getopts "\-:" opt do case $opt in -) # long options case $OPTARG in help) print_help;; *) echo "unknown option: $OPTARG"; exit 1;; esac;; ?) if [[ $opt = "?" ]]; then uopt=$OPTARG else uopt=$opt fi echo "unknown option: $uopt"; exit 1;; esac done shift $((OPTIND - 1))
これでどうだ!
ロングオプションで更に値付きまでは検証してないが、OPTIND使うとか、あるいはオプション処理する毎に shift しといて $1 とるとかでなんとかなるか?
ちなみに、?) のとこが複雑な書き方になっているのは、getopts "・・・"のとこに書いてあるのにcase分で拾っていないオプションを与えた場合と、そもそもgetoptsの引数にあげていないオプションを与えた場合で挙動が違うから。