getoptsがうまくいかないようです

getoptsがうまくいかないようです

オプションを解析するために次のスクリプトを実行しようとしてもgetopts機能しないようです。

#!/bin/bash
set -x
echo $@
while getopts "rf" opt
do
  case "${opt}" in
    r)
        ropt=${OPTARG}
        ;;
    f)
        fopt=${OPTARG}
        ;;
  esac
done

shift $((OPTIND -1))

echo $fopt $ropt

私が得た結果は次のとおりです。

$ ./myscript.sh -f opt2 -r opt1
+ echo -f opt2 -r opt1
-f opt2 -r opt1
+ getopts rf opt
+ case "${opt}" in
+ fopt=
+ getopts rf opt
+ shift 1
+ echo

+ set +x

何が間違っているのかというアイデアはありますか?

ベストアンサー1

オプションはオプション引数を使用したいが、getoptsこれを通知しません。

使用する必要があります

while getopts "r:f:" opt; do ...; done

つまり、パラメータを持つ各オプションは、パラメータ:文字列の後に続く必要がありますgetopts

あなたも基本 case無効なオプションを処理する最後の四半期:

 *) usage >&2
    exit 1

(無効なオプションまたは欠落しているオプション引数に関するエラーメッセージは、単純なヘルプメッセージを標準出力として印刷するために定義した関数で期待されるものとして表示されます。getoptsusage

また、二重引用符を忘れないでください。みんな拡張、さらに$(( OPTIND - 1 ))

最後のポイントと関連:

おすすめ記事