"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