El ==operador se utiliza para comparar dos cadenas en el script de shell. Sin embargo, quiero comparar dos cadenas ignorando mayúsculas y minúsculas, ¿cómo se puede hacer? ¿Hay algún comando estándar para esto?
string
shell
compare
case-insensitive
Sachin Chourasiya
fuente
fuente

ifdeclaraciones, elshoptenfoque requiere que use la forma de doble[[ ]]condicional de condicional en lugar de la forma de un solo corchete[ ]. Ver también: gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html==se usa para comparar dos cadenas, pero la respuesta demuestra una comparación que no distingue entre mayúsculas y minúsculas mediante unacaseinstrucción. De modo tranquilizador, lashoptsolución también permite el uso de mayúsculas y minúsculas de==,=~y otros operadores de comparación de cadenas.shopt -u nocasematchdespués de que se realice la comparación para volver al valor predeterminado de bash.nocasematchconfiguración. Agárralo ySHELLNOCASEMATCH=`shopt -p nocasematch`luegoshopt -s nocasematch$SHELLNOCASEMATCHSHELLNOCASEMATCH=$(shopt -p nocasematch; true)porqueshopt -psaldrá con el código 1 si la opción no está configurada, y esto puede hacer que el script se cancele siset -eestá vigente.En Bash, puede usar la expansión de parámetros para modificar una cadena en minúsculas / mayúsculas:
fuente
echodeclaración da como resultado:-bash: ${var1,,}: bad substitutionshopt -s nocasematchse implementa, pero por lo general, estas soluciones de "nivel de lenguaje" lo manejan correctamente.Todas estas respuestas ignoran la forma más fácil y rápida de hacer esto (siempre que tenga Bash 4):
Todo lo que está haciendo allí es convertir ambas cadenas a minúsculas y comparar los resultados.
fuente
Guarde el estado de nocasematch (en caso de que alguna otra función dependa de que esté deshabilitada):
Nota: solo use
localsi está dentro de una función.fuente
casedeclaraciones (incluidas las de la respuesta de ghostdog) siempre harán que mi piel seUna forma sería convertir ambas cadenas en superior o inferior:
Otra forma sería usar grep:
fuente
trmétodo en mis aplicaciones Docker-Iized basadas en Alpine (que proporciona ashtravés debusybox). Gracias.Para korn shell, uso el comando integrado typeset (-l para minúsculas y -u para mayúsculas).
fuente
Muy fácil si fgrep para hacer una línea que distingue entre mayúsculas y minúsculas compare:
fuente
if fgrep -qix -- "$str1" <<<"$str2"; thenen su lugar.Aquí está mi solución usando tr:
fuente
greptiene una-ibandera que significa que no distingue entre mayúsculas y minúsculas, así que pídele que te diga si var2 está en var1.fuente
Para
zshla sintaxis es un poco diferente, pero sigue siendo más corta que la mayoría de las respuestas aquí:Esto convertirá ambas cadenas a mayúsculas antes de la comparación.
Otro método hace uso de zsh's
globbing flags, que nos permite hacer uso directo de la coincidencia entre mayúsculas y minúsculas mediante el uso de laibandera global:fuente
shopt -s nocaseglob
fuente
Me encontré con este gran blog / tutorial / lo que sea sobre tratar con un patrón sensible a mayúsculas y minúsculas . Los siguientes tres métodos se explican en detalle con ejemplos:
1. Convertir el patrón a minúsculas usando el comando tr
2. Use expresiones regulares con patrones de casos
3. Encienda nocasematch
fuente