az와 AZ의 역설

az와 AZ의 역설

문자 유형을 식별하기 위해 쉘 스크립트를 작성했습니다.

printf "Enter a character: "
read var
case "$var" in
[a-z])
        echo "You entered a lower case alphabet."
        ;;
[A-Z])
        echo "You entered an upper case alphabet."
        ;;
[0-9])
        echo "You entered a digit."
        ;;
?)
        echo "You entered a special simbol."
        ;;
*)
        echo "You entered more then one character."
        ;;
esac

그러나 입력 문자가 소문자 또는 대문자인 경우 출력은 다음과 같습니다.

소문자를 입력하셨습니다.

이렇게 쓰면 출력이 정확합니다.

printf "Enter a character: "
read var
case "$var" in
[A-Z])
        echo "You entered a upper case alphabet."
        ;;
[a-z])
        echo "You entered an lower case alphabet."
        ;;
[0-9])
        echo "You entered a digit."
        ;;
?)
        echo "You entered a special simbol."
        ;;
*)
        echo "You entered more then one character."
        ;;
esac

이유를 이해하지 못합니다. 유일한 논리적 대답은 [a-z]소문자와 대문자를 모두 포함하는 것입니다.

답변1

어휘 순서는 지역에 따라 다릅니다. 차이점은 "특수" 문자(예: ä독일어 a의 문자 이지만 z핀란드어의 "특수" 문자는 아님)에만 국한되지 않습니다. 대조적으로, 일부 로케일에서는 정렬이 AaBbCc…[a-z]확장 될 수 있습니다 [aBbCc…Zz]. Stephen Chazeras [[:lower:]]가 언급한 모델은 [[:upper:]]이러한 놀라움의 영향을 받지 않습니다.

관련 정보