"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