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.