쉘 스크립트의 Case 문은 대문자를 인식할 수 없습니다.

쉘 스크립트의 Case 문은 대문자를 인식할 수 없습니다.

다음 쉘 스크립트가 있습니다

#! /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에 대한 좋은 참고자료이기도 합니다.[ 울레치, 글로브스그리고 아래 코드가 여전히 실패하고 [

  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:]_.]는 임의의 숫자와 일치합니다. or_ or.

글로바시레인지에 대한 정보:배쉬 참조 매뉴얼

답변2

LANG이는 다음과 같이 설정되어야 합니다 .C

터미널 유형

LANG=C

환경 LANG변수는 언어/지역 및 인코딩을 나타냅니다. C언어 설정은 어디에 있습니까?

관련 정보