Como altero a caixa (maiúsculas e minúsculas) das strings na minha variável?

Como altero a caixa (maiúsculas e minúsculas) das strings na minha variável?
"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 shsintaxe 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, kshou 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, basha 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

informação relacionada