`getopts`と`case`: `*)`を最後のパターン句として使用するとき、または`\?)`と`:)`を最後の2つのパターン句として使用するとき?

`getopts`と`case`: `*)`を最後のパターン句として使用するとき、または`\?)`と`:)`を最後の2つのパターン句として使用するとき?

getoptswith句を使用する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

自動エラー報告を使用する場合(最初の文字がコロンの場合)、実際には合計を確認するだけ:です?getoptsbashoptstring

この方法で使用しないと、getopts無効なオプションと欠落しているオプション引数の自己診断メッセージが生成されます(通常これで十分です)。実際、Silent がない限り、変数に配置され:たり?、変数に含まれたりしません。

Case ステートメントを使用することは両方のケース*をキャプチャする 1 つの方法ですが、getoptsミュートされた場合、どのエラーが発生したのかわからず、an error occurred while parsing the command line optionsユーザーにのみ話すことができます。

関連情報