"Enter test: "
read test
if [[ $test == "a" ]]; then
echo "worked"
else
echo "failed"
fi
Es una ilustración simple de la prueba que estoy haciendo, pero si ingreso "A", fallará. ¿Hay algo que pueda hacer en la etapa variable para cambiarlo todo a minúsculas, de modo que la prueba coincida?
Respuesta1
Simplemente use la sh
sintaxis estándar (POSIX y Bourne):
case $answer in
a|A) echo OK;;
*) echo >&2 KO;;
esac
O:
case $answer in
[aA]) echo OK;;
*) echo >&2 KO;;
esac
Con bash
, ksh
o zsh
(los 3 shells que soportan esa sintaxis no estándar [[...]]
), puedes declarar unminúsculavariable:
typeset -l test
printf 'Enter test: '
read test
if [ "$test" = a ]; then...
(tenga en cuenta que, bash
en ese caso, la conversión es falsa en algunas regiones).
Respuesta2
Hay varias formas útiles de lograr esto (en bash
):
dos cheques
echo -n "Enter test: "
read test
if [[ $test == "a" || $test == "A" ]]; then
echo "worked"
else
echo "failed"
fi
hacer la entrada en minúsculas
echo -n "Enter test: "
read test
test="${test,,}"
if [[ $test == "a" ]]; then
echo "worked"
else
echo "failed"
fi
expresiones regulares para ambos casos
echo -n "Enter test: "
read test
if [[ $test =~ ^[aA]$ ]]; then
echo "worked"
else
echo "failed"
fi
hacer que el shell ignore el caso
echo -n "Enter test: "
read test
shopt -s nocasematch
if [[ $test == a ]]; then
echo "worked"
else
echo "failed"
fi
Respuesta3
Hay varias formas de hacer esto. Si está utilizando una versión reciente de bash, es bastante fácil: puede convertir el caso de test
o puede usar una expresión regular para que coincida con a mayúscula y minúscula.
Primero la forma de expresiones regulares:
read -p "enter test: " test;[[ $test =~ ^[Aa]$ ]] && echo yes || echo no
Ahora el cambio de caso:
read -p "enter test: " test;[[ ${test^^} = A ]] && echo yes || echo no
Respuesta4
sed -ne '/^[aA]$/!i\' -e failed -e 's//worked/p;q' </dev/tty