我有以下 shell 脚本
#! /bin/bash
echo -e "Enter any character: \c"
read value
case $value in
[a-z] )
echo You have entered a lower case alphabet;;
[A-Z] )
echo You have entered an upper case alphabet;;
[0-9] )
echo You have entered a number;;
[?] )
echo You have entered a special character;;
[*] )
echo Unknown value;;
esac
在这里,当我输入一个大写字母时,例如
K
我得到输出
You have entered a lower case alphabet
如何纠正呢?
答案1
和这个结合钢铁起子的排序规则链接,解决方案是使用 中定义的集合man tr
。
[[
另外,对于vs来说也是一个很好的参考[
伍利奇,GLOBS以及为什么下面的代码可能仍然失败,仅显示 [
1 #! /bin/bash
2
3 echo -e "Enter any character: \c"
4 read -rN 1 value
5 echo
6
7 case $value in
8 [[:lower:]] )
9 echo You have entered a lower case alphabet;;
10 [[:upper:]] )
11 echo You have entered an upper case alphabet;;
12 [[:digit:]] )
13 echo You have entered a number;;
14 [?] )
15 echo You have entered a special character;;
16 [*] )
17 echo Unknown value;;
18 esac
来自上面的羊毛链接:
范围
Glob 可以使用方括号指定字符范围或类别。这使您能够匹配一组字符。例如:
[abcd] 匹配 a 或 b 或 c 或 d
[ad] 如果设置了 globasciiranges 或者您的语言环境是 C 或 POSIX,则与上面相同。否则,由实现定义。
[!aeiouAEIOU] 匹配除 a、e、i、o、u 及其大写对应项之外的任何字符
[[:alnum:]] 匹配当前区域设置中的任何字母数字字符(字母或数字)
[[:space:]] 匹配任何空白字符
[![:space:]] 匹配任何非空白字符
[[:digit:]_.] 匹配任何数字、或 _ 或 。
有关 globasciiranges 的信息:Bash 参考手册
答案2
这里需要设置LANG
为C
在终端类型中
LANG=C
环境LANG
变量表示语言/区域设置和编码,其中C
是语言设置