最初の文字が(コロン)のgetoptsオプション文字列の目的は何ですか?

最初の文字が(コロン)のgetoptsオプション文字列の目的は何ですか?

オプション文字列で使用されている場合は、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!

おすすめ記事