내 변수에서 문자열의 대소문자(대소문자)를 어떻게 변경합니까?

내 변수에서 문자열의 대소문자(대소문자)를 어떻게 변경합니까?
"Enter test: "
read test

if [[ $test == "a" ]]; then
    echo "worked"
else
    echo "failed"
fi

제가 하고 있는 테스트에 대한 간단한 예시인데 "A"를 입력하면 실패하게 됩니다. 테스트가 일치하도록 변수 단계에서 모두 작은 경우로 변경하기 위해 할 수 있는 일이 있나요?

답변1

표준 sh(POSIX 및 Bourne) 구문을 사용하세요.

case $answer in
  a|A) echo OK;;
  *)   echo >&2 KO;;
esac

또는:

case $answer in
  [aA]) echo OK;;
  *)    echo >&2 KO;;
esac

bash, ksh또는 zsh(비표준 [[...]]구문을 지원하는 3개의 쉘) 을 사용하면 다음을 선언할 수 있습니다.소문자변하기 쉬운:

typeset -l test
printf 'Enter test: '
read test
if [ "$test" = a ]; then...

( bash일부 로케일에서는 '의 대소문자 변환이 가짜라는 점에 유의하세요).

답변2

이를 달성하기 위한 몇 가지 유용한 방법이 있습니다( bash).

수표 두 개

echo -n "Enter test: "
read test

if [[ $test == "a" || $test == "A" ]]; then
    echo "worked"
else
    echo "failed"
fi

입력을 소문자로 만드세요

echo -n "Enter test: "
read test
test="${test,,}"

if [[ $test == "a" ]]; then
    echo "worked"
else
    echo "failed"
fi

두 경우 모두 정규식

echo -n "Enter test: "
read test

if [[ $test =~ ^[aA]$ ]]; then
    echo "worked"
else
    echo "failed"
fi

쉘이 대소 문자를 무시하도록 만드십시오

echo -n "Enter test: "
read test

shopt -s nocasematch
if [[ $test == a ]]; then
    echo "worked"
else
    echo "failed"
fi

답변3

이를 수행하는 방법에는 여러 가지가 있습니다. 최신 버전의 bash를 사용하고 있다면 매우 쉽습니다. 의 대소문자를 변환 test하거나 정규식을 사용하여 대문자와 소문자 a를 모두 일치시킬 수 있습니다.

먼저 정규식 방법:

read -p "enter test: " test;[[ $test =~ ^[Aa]$ ]] && echo yes || echo no

이제 케이스 시프터:

read -p "enter test: " test;[[ ${test^^} = A ]] && echo yes || echo no

답변4

sed -ne '/^[aA]$/!i\' -e failed -e 's//worked/p;q' </dev/tty

관련 정보