web-dev-qa-db-fra.com

Commande pour comparer deux chaînes

Je dois comparer deux chaînes et ignorer la casse du contenu. SI [$ premier! = $ Seconde]. Tout ce que je peux ajouter à cette commande pour que la comparaison ignore le cas.

6
Gimmeray

En bash, vous pouvez facilement convertir des requêtes, par exemple. si var="vAlUe" alors

$ echo "${var^^}"
VALUE

tandis que

$ echo "${var,,}"
value

Vous pouvez utiliser ceci pour rendre votre comparaison insensible à la casse en convertissant les deux arguments en un seul cas, c.-à-d.

if [ "${first,,}" == "${second,,}" ]; then
  echo "equal"
fi

ou

if [ "${first^^}" == "${second^^}" ]; then
  echo "equal"
fi

Une autre approche consiste à utiliser l'option bash nocasematch (merci @Tshilidzi_Mudau), bien que cela ne semble fonctionner qu'avec l'opérateur de test étendu [[ ... ]]:

$ first=abc; second=ABC
$ (shopt -s nocasematch; if [[ "$first" == "$second" ]]; then echo "Match"; else echo "No match"; fi)
Match

mais

$ (shopt -s nocasematch; if [ "$first" == "$second" ]; then echo "Match"; else echo "No match"; fi)
No match
~$ 
21
steeldriver