shell脚本中case语句无法识别大写字母

shell脚本中case语句无法识别大写字母

我有以下 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

这里需要设置LANGC

在终端类型中

LANG=C

环境LANG变量表示语言/区域设置和编码,其中C是语言设置

相关内容