변수에서 문자열의 대소문자(대문자 및 소문자)를 변경하는 방법은 무엇입니까?

변수에서 문자열의 대소문자(대문자 및 소문자)를 변경하는 방법은 무엇입니까?
"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하거나 정규식을 사용하여 대문자와 소문자를 일치시킬 수 있습니다.

첫 번째는 정규식 방법입니다.

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

관련 정보