GNU/Linux >> Tutoriels Linux >  >> Linux

bash - correspondance insensible à la casse de la variable

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.


Linux
  1. Script bash (I)

  2. Bash Dynamic (variable) Noms des variables ?

  3. Glob insensible à la casse sur zsh/bash

  4. Fonction bash pour trouver le plus récent modèle de correspondance de fichier

  5. passer grep dans une variable bash

Bash declare Statement :Syntaxe et exemples

Variable d'exportation bash

Bash printf - Comment imprimer une variable dans Bash

Bash Scripting - Variables expliquées avec des exemples

Comment définir une variable d'environnement dans Bash

Correspondance de modèle de script bash