az 与 AZ 的悖论

az 与 AZ 的悖论

我写了一个shell脚本来识别字符类型

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]。斯蒂芬·查泽拉斯[[:lower:]]提到的模式[[:upper:]]不会受到这些意外的影响。

相关内容