다음 쉘 스크립트가 있습니다
#! /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
언어 설정은 어디에 있습니까?