"Enter test: "
read test
if [[ $test == "a" ]]; then
echo "worked"
else
echo "failed"
fi
É uma ilustração simples do teste que estou fazendo, mas se eu digitar "A", ele irá falhar. Há algo que eu possa fazer no estágio variável para mudar tudo para letras minúsculas, para que o teste corresponda?
Responder1
Basta usar a sh
sintaxe padrão (POSIX e Bourne):
case $answer in
a|A) echo OK;;
*) echo >&2 KO;;
esac
Ou:
case $answer in
[aA]) echo OK;;
*) echo >&2 KO;;
esac
Com bash
, ksh
ou zsh
(os 3 shells que suportam essa sintaxe não padrão [[...]]
), você pode declarar umminúsculasvariável:
typeset -l test
printf 'Enter test: '
read test
if [ "$test" = a ]; then...
(cuidado, bash
a conversão de caso é falsa em algumas localidades).
Responder2
Existem várias maneiras úteis de conseguir isso (em bash
):
dois cheques
echo -n "Enter test: "
read test
if [[ $test == "a" || $test == "A" ]]; then
echo "worked"
else
echo "failed"
fi
coloque a entrada em minúscula
echo -n "Enter test: "
read test
test="${test,,}"
if [[ $test == "a" ]]; then
echo "worked"
else
echo "failed"
fi
regex para ambos os casos
echo -n "Enter test: "
read test
if [[ $test =~ ^[aA]$ ]]; then
echo "worked"
else
echo "failed"
fi
faça o shell ignorar o caso
echo -n "Enter test: "
read test
shopt -s nocasematch
if [[ $test == a ]]; then
echo "worked"
else
echo "failed"
fi
Responder3
Existem várias maneiras de fazer isso. Se você estiver usando uma versão recente do bash, é muito fácil: você pode converter a caixa de test
, ou pode usar um regex para corresponder a maiúsculas e minúsculas a.
Primeiro o caminho regex:
read -p "enter test: " test;[[ $test =~ ^[Aa]$ ]] && echo yes || echo no
Agora o deslocador de caso:
read -p "enter test: " test;[[ ${test^^} = A ]] && echo yes || echo no
Responder4
sed -ne '/^[aA]$/!i\' -e failed -e 's//worked/p;q' </dev/tty