Существует несколько полезных способов достижения этого (в 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
Regex для обоих случаев
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
Просто используйте стандарт SH
(POSIX и BOURNE) Синтаксис:
case $answer in
a|A) echo OK;;
*) echo >&2 KO;;
esac
или:
case $answer in
[aA]) echo OK;;
*) echo >&2 KO;;
esac
с ,
, ksh
или ZSH
(3 раковины, которые поддерживают этот нестандартный [[[...]]
[[[...]] синтаксис), вы можете объявить в нижнем регистре :
typeset -l test
printf 'Enter test: '
read test
if [ "$test" = a ]; then...
(остерегайтесь, что Bash
Шкаф преобразования является поддельным в некоторых локалях).
Есть несколько способов сделать это. Если вы используете недавнюю версию Bash, это довольно легко: вы можете преобразовать корпус теста
, или вы можете использовать Regex, чтобы соответствовать как верхним и нижним регистру.
Сначала дорого регеляции:
read -p "enter test: " test;[[ $test =~ ^[Aa]$ ]] && echo yes || echo no
Теперь в случае смещения дела:
read -p "enter test: " test;[[ ${test^^} = A ]] && echo yes || echo no