Comparación que no distingue entre mayúsculas y minúsculas de cadenas en un script de shell
El ==
operador se utiliza para comparar dos cadenas en un script de shell. Sin embargo, quiero comparar dos cadenas ignorando mayúsculas y minúsculas, ¿cómo se puede hacer? ¿Existe algún comando estándar para esto?
En Bash, puede usar la expansión de parámetros para modificar una cadena a minúsculas/mayúsculas: ${var,,}
para minúsculas, ${var^^}
para mayúsculas.
var1=TesT
var2=tEst
echo ${var1,,} ${var2,,}
echo ${var1^^} ${var2^^}
Todas estas respuestas ignoran la forma más fácil y rápida de hacer esto (siempre que tengas Bash 4):
if [ "${var1,,}" = "${var2,,}" ]; then
echo ":)"
fi
Todo lo que estás haciendo allí es convertir ambas cadenas a minúsculas y comparar los resultados.
si tienes bash
str1="MATCH"
str2="match"
shopt -s nocasematch
case "$str1" in
$str2 ) echo "match";;
*) echo "no match";;
esac
de lo contrario, deberías decirnos qué shell estás utilizando.
alternativa, usando awk
str1="MATCH"
str2="match"
awk -vs1="$str1" -vs2="$str2" 'BEGIN {
if ( tolower(s1) == tolower(s2) ){
print "match"
}
}'
Guarde el estado de nocasematch
(en caso de que alguna otra función dependa de que esté deshabilitada):
local orig_nocasematch=$(shopt -p nocasematch; true)
shopt -s nocasematch
[[ "foo" == "Foo" ]] && echo "match" || echo "notmatch"
$orig_nocasematch
Tenga en cuenta que
local
solo se requiere dentro de una función.
Además, la; true
parte evitará que el shell salga cuandoset -e
esté activado y$(shopt -p nocasematch)
falle (porque nocasematch NO se configuró en absoluto).