`getopts` 및 `case`: `*)`를 마지막 패턴 절로 사용하거나 `\?)` 및 `:)`를 마지막 두 패턴 절로 사용할 때?

`getopts` 및 `case`: `*)`를 마지막 패턴 절로 사용하거나 `\?)` 및 `:)`를 마지막 두 패턴 절로 사용할 때?

getoptswith 절을 사용할 case*)마지막 패턴 절인 패턴 절은 \?)마지막 두 패턴 절인 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 문을 사용하는 것은 *두 경우를 모두 포착하는 한 가지 방법이지만, getopts음소거된 경우 어떤 오류가 발생했는지 알 수 없으며 an error occurred while parsing the command line options사용자에게만 말할 수 있습니다.

관련 정보