bash 스크립트: 변수가 [AZ]에 있는지 확인하세요.

bash 스크립트: 변수가 [AZ]에 있는지 확인하세요.

변수가 [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

입력 유효성 검사에 사용하고 싶은 것 같습니다.

관련 정보