GNU/Linux >> Tutoriales Linux >  >> Linux

bash - coincidencia de variables que no distingue entre mayúsculas y minúsculas

Hoja estándar

No es necesario usar ese ksh -estilo [[...]] comando, puede usar el estándar sh case construye aquí:

case $LINUX_CONF in
  ([Nn][Oo]) echo linux;;
  (*)        echo not linux;;
esac

O nombrando cada posible caso individualmente:

case $LINUX_CONF in
  (No | nO | NO | no) echo linux;;
  (*)                 echo not linux;;
esac

golpe

Para un bash -manera específica de hacer coincidencias que no distinguen entre mayúsculas y minúsculas, puede hacer:

shopt -s nocasematch
[[ $LINUX_CONF = no ]] && echo linux

O:

[[ ${LINUX_CONF,,} = no ]] && echo linux

(donde ${VAR,,} es la sintaxis para convertir una cadena a minúsculas).

También puede forzar que una variable se convierta a minúsculas al asignarla con:

typeset -l LINUX_CONF

Eso también proviene de ksh y también es compatible con bash y zsh .

Más variantes con otras conchas:

zsh

set -o  nocasematch
[[ $LINUX_CONF = no ]] && echo linux

(igual que en bash ).

setopt extendedglob
[[ $LINUX_CONF = (#i)no ]] && echo linux

(menos peligroso que hacer todas coincide con mayúsculas y minúsculas)

[[ ${(L)LINUX_CONF} = no ]] && echo linux

(convertir a operador en minúsculas)

set -o rematchpcre
[[ $LINUX_CONF =~ '^(?i)no\z' ]]

(sintaxis PCRE)

ksh93

[[ $LINUX_CONF = ~(i)no ]]

o

[[ $LINUX_CONF = ~(i:no) ]]

Tenga en cuenta que todos los enfoques anteriores que no sean [nN][oO] hacer coincidencias que no distingan entre mayúsculas y minúsculas depende de la configuración regional del usuario. No todas las personas en todo el mundo están de acuerdo en cuál es la versión en mayúsculas de una letra dada, incluso para las ASCII.

En la práctica para los ASCII, al menos en los sistemas GNU, las desviaciones de las reglas en inglés parecen estar limitadas al i y I letras y si el punto está allí o no en la versión en mayúsculas o minúsculas.

Lo que eso significa es que [[ ${VAR,,} = oui ]] no se garantiza que coincida con OUI en cada configuración regional (incluso cuando el error en las versiones actuales de bash está arreglado).


Mantenga su comando existente pero en la línea antes de ejecutar esto:

LINUX_CONF=$(echo $LINUX_CONF | awk '{ print tolower($0) }')

Independientemente del caso del valor almacenado en su variable, esto obligará a que el valor de reemplazo esté en minúsculas. Esto da como resultado hacer coincidir su comando existente con solo una línea de código adicional.


Linux
  1. Bash secuencias de comandos (I)

  2. ¿Paréntesis simple en la asignación de variables Bash?

  3. ¿Cómo pruebo si una variable es un número en Bash?

  4. Alias ​​con variable en bash

  5. Coincidencia de patrón de secuencia de comandos Bash

Declaración Bash declare:sintaxis y ejemplos

Variable de exportación de bash

Bash printf - Cómo imprimir una variable en Bash

Bash Scripting - Variables explicadas con ejemplos

Cómo establecer la variable de entorno en Bash

¿Cómo eliminar la variable de solo lectura en bash?