オプション文字列で使用されている場合は、getopts
次のようになります。http://wiki.bash-hackers.org/howto/getopts_tutorial
オプション文字列の最初の文字が(コロン)の場合、前にオプション文字がないため、通常は意味がありません。 getoptsは次のように切り替えます。「自動エラー報告モード」。効率的なスクリプトでは、通常これが欲しいものです。これにより、面倒なメッセージが邪魔されることなくエラーを直接処理できます。
次が何を意味するのか知りたいです。
「自動エラー報告モード」
「面倒なメッセージが邪魔されずに自分でエラーを処理できるようにします」
いくつかの例を挙げることができますか?
ベストアンサー1
の最初の文字optstring
がコロンの場合、getopts
欠落しているオプションパラメーターまたは無効なオプションの診断メッセージは生成されません。
これは、スクリプトによって生成された診断メッセージをさらに制御する必要がある場合、またはユーザーが不安定なコマンドラインオプションを提供し、標準エラーストリームに何も表示したくない場合に便利です。
自動レポートモード(最初は:
)で無効なオプションについてユーザーに警告するには、に渡された変数を調べる必要があり?
ますgetopts
。同様に、欠落しているオプションパラメータの場合、両方の:
エラーは通常getopts
独自に処理されますが、ユーザーに独自のエラーを報告するには、正しい診断メッセージを提供できるようにこれらのエラーを個別にキャプチャする必要があります。
非自動報告モードには、getopts
標準エラーに関する独自のエラー報告があり、*
「すべてのエラー」のみをキャプチャします。
次の2つの例を比較してみてください。
#!/bin/bash
while getopts 'a:b:' opt; do
case "$opt" in
a) printf 'Got a: "%s"\n' "$OPTARG" ;;
b) printf 'Got b: "%s"\n' "$OPTARG" ;;
*) echo 'some kind of error' >&2
exit 1
esac
done
事件*
摘発どのコマンドラインの解析エラーです。
$ bash script.sh -a
script.sh: option requires an argument -- a
some kind of error
$ bash script.sh -c
script.sh: illegal option -- c
some kind of error
#!/bin/bash
while getopts ':a:b:' opt; do
case "$opt" in
a) printf 'Got a: "%s"\n' "$OPTARG" ;;
b) printf 'Got b: "%s"\n' "$OPTARG" ;;
:) echo 'missing argument!' >&2
exit 1 ;;
\?) echo 'invalid option!' >&2
exit 1
esac
done
上記の例は、:
引数の欠落エラーをキャプチャしますが、?
誤ったオプションエラーをキャッチする場合です(?
リテラルと一致するにはエスケープまたは引用する必要があります?
。そうしないと単一文字と一致します)。
$ bash script.sh -a
missing argument!
$ bash script.sh -b
missing argument!
$ bash script.sh -c
invalid option!