我写了一个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:]]
不会受到这些意外的影响。