getopts
with句を使用するcase
場合、*)
最後のパターン句であるパターン句は、最後の\?)
2つのパターン句であるandパターン句と同じですか?:)
具体的には、
while getopts "<optionString>" opt; do
case $opt in
a) a="$OPTARG"
;;
b) b="$OPTARG"
;;
...
;;
\?) printf "illegal option: -%s\n" "$OPTARG" >&2
exit 1
;;
:) printf "missing argument for -%s\n" "$OPTARG" >&2
exit 1
;;
esac
done
そして
while getopts "<optionString>" opt; do
case $opt in
a) a="$OPTARG"
;;
b) b="$OPTARG"
;;
...
;;
*) printf "illegal option: -%s, or missing argument for -%s\n" "$OPTARG" "$OPTARG" >&2
exit 1
;;
esac
done
ありがとうございます。
答え1
自動エラー報告を使用する場合(最初の文字がコロンの場合)、実際には合計を確認するだけ:
です?
。getopts
bash
optstring
この方法で使用しないと、getopts
無効なオプションと欠落しているオプション引数の自己診断メッセージが生成されます(通常これで十分です)。実際、Silent がない限り、変数に配置され:
たり?
、変数に含まれたりしません。
Case ステートメントを使用することは両方のケース*
をキャプチャする 1 つの方法ですが、getopts
ミュートされた場合、どのエラーが発生したのかわからず、an error occurred while parsing the command line options
ユーザーにのみ話すことができます。