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
if
declaraciones, elshopt
enfoque 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 unacase
instrucción. De modo tranquilizador, lashopt
solución también permite el uso de mayúsculas y minúsculas de==
,=~
y otros operadores de comparación de cadenas.shopt -u nocasematch
después de que se realice la comparación para volver al valor predeterminado de bash.nocasematch
configuración. Agárralo ySHELLNOCASEMATCH=`shopt -p nocasematch`
luegoshopt -s nocasematch
$SHELLNOCASEMATCH
SHELLNOCASEMATCH=$(shopt -p nocasematch; true)
porqueshopt -p
saldrá con el código 1 si la opción no está configurada, y esto puede hacer que el script se cancele siset -e
está vigente.En Bash, puede usar la expansión de parámetros para modificar una cadena en minúsculas / mayúsculas:
fuente
echo
declaración da como resultado:-bash: ${var1,,}: bad substitution
shopt -s nocasematch
se 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
local
si está dentro de una función.fuente
case
declaraciones (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
tr
método en mis aplicaciones Docker-Iized basadas en Alpine (que proporciona ash
travé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"; then
en su lugar.Aquí está mi solución usando tr:
fuente
grep
tiene una-i
bandera 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
zsh
la 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 lai
bandera 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