Short standard
Pas besoin d'utiliser ce ksh
-style [[...]]
commande, vous pouvez utiliser la norme sh
case
construire ici :
case $LINUX_CONF in
([Nn][Oo]) echo linux;;
(*) echo not linux;;
esac
Ou en nommant chaque cas possible individuellement :
case $LINUX_CONF in
(No | nO | NO | no) echo linux;;
(*) echo not linux;;
esac
basser
Pour un bash
-une manière spécifique de faire une correspondance insensible à la casse, vous pouvez faire :
shopt -s nocasematch
[[ $LINUX_CONF = no ]] && echo linux
Ou :
[[ ${LINUX_CONF,,} = no ]] && echo linux
(où ${VAR,,}
est la syntaxe pour convertir une chaîne en minuscules).
Vous pouvez également forcer une variable à être convertie en minuscules lors de l'affectation avec :
typeset -l LINUX_CONF
Cela vient également de ksh et est également pris en charge par bash
et zsh
.
Plus de variantes avec d'autres coques :
zsh
set -o nocasematch
[[ $LINUX_CONF = no ]] && echo linux
(identique à bash
).
setopt extendedglob
[[ $LINUX_CONF = (#i)no ]] && echo linux
(moins dangereux que de faire tous correspond à la casse)
[[ ${(L)LINUX_CONF} = no ]] && echo linux
(convertir en opérateur minuscule)
set -o rematchpcre
[[ $LINUX_CONF =~ '^(?i)no\z' ]]
(syntaxe PCRE)
ksh93
[[ $LINUX_CONF = ~(i)no ]]
ou
[[ $LINUX_CONF = ~(i:no) ]]
Notez que toutes les approches ci-dessus autres que [nN][oO]
pour effectuer une correspondance insensible à la casse dépend des paramètres régionaux de l'utilisateur. Toutes les personnes dans le monde ne sont pas d'accord sur la version majuscule d'une lettre donnée, même pour les lettres ASCII.
En pratique pour les ASCII, du moins sur les systèmes GNU, les écarts aux règles anglaises semblent se limiter aux i
et I
lettres et si le point est présent ou non sur la version majuscule ou minuscule.
Cela signifie que [[ ${VAR,,} = oui ]]
n'est pas garanti de correspondre sur OUI
dans chaque locale (même lorsque le bogue dans les versions actuelles de bash
est fixe).
Conservez votre commande existante mais sur la ligne avant qu'elle n'exécute ceci :
LINUX_CONF=$(echo $LINUX_CONF | awk '{ print tolower($0) }')
Quelle que soit la casse de la valeur stockée dans votre variable, cela forcera la valeur de remplacement à être en minuscules. Cela se traduit par la correspondance de votre commande existante avec une seule ligne de code supplémentaire.