변수가 [AZ]에 있는지 확인하는 방법은 무엇입니까?
나는 다음과 같은 것을 달성하고 싶습니다 :
read var
while [ $var in [A-Z] ]
do
#code here
done
어떻게 이를 달성할 수 있나요?
답변1
==
Bash에서는 다음의 오른쪽에 패턴을 사용할 수 있습니다 [[ ... ]]
.
read var
LC_ALL=C # Turn off locale.
if [[ $var == [A-Z] ]] ; then
echo yes
fi
참가 하고 싶지 않다면 y
지역 설정을 꺼야 할 수도 있습니다 A-Z
.
답변2
간단한 하나의 라이너는 다음과 같습니다.
re='[a-zA-Z]'; if [[ Z =~ $re ]]; then echo "Match"; else echo "No match"; fi
전체 스크립트는 다음과 같습니다:
#!/bin/bash
re='[a-zA-Z]'
read -p "Enter a char or string > " var
if [[ "$var" =~ $re ]]; then
echo "Entered string matches."
else
echo "Entered string does not match";
fi
답변3
$var
단일 문자를 가정하면 다음과 같습니다 .
이를 사용한 경우 어떤 쉘 case
에도 이식 가능합니다 .sh
case "$var" in [A-Z]) thing_to_do_here ;; esac
심지어
case "$var" in [[:upper:]]) thing_to_do_here ;; esac
불균형 괄호를 좋아하지 않는 사람들을 위해 다음과 같이 쓸 수 있습니다
case "$var" in ([[:upper:]]) thing_to_do_here ;; esac
답변4
Bash의 정규 표현식에 의존하고 싶지 않다면:
remainder=$(tr -d A-Z <<<$var)
while [ ! -z $remainder ];do
read -p "Invalid value entered. Please try again." var
remainder=$(tr -d A-Z <<<$var)
done
입력 유효성 검사에 사용하고 싶은 것 같습니다.