オプションを解析するために次のスクリプトを実行しようとしても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
(無効なオプションまたは欠落しているオプション引数に関するエラーメッセージは、単純なヘルプメッセージを標準出力として印刷するために定義した関数で期待されるものとして表示されます。getopts
)usage
また、二重引用符を忘れないでください。みんな拡張、さらに$(( OPTIND - 1 ))
。
最後のポイントと関連: