Comment comparer des chaînes en bash
Nous pouvons comparer les chaînes en utilisant différents opérateurs de comparaison et vérifier si la chaîne contient une sous-chaîne ou non en utilisant les expressions régulières.
Comparaison de chaînes en Bash
La comparaison des chaînes de caractères signifie qu’il faut vérifier si les chaînes de caractères données sont identiques ou non. Deux ou plusieurs chaînes sont identiques si elles sont de longueur égale et contiennent la même séquence de caractères.
Nous utilisons différents opérateurs de comparaison de chaînes de caractères qui retourner vrai ou faux selon la condition. Certains des opérateurs de comparaison de chaînes de caractères les plus utilisés peuvent être énumérés comme suit:
string1 = string2 |
Opérateur d’égalité utilisé avec la commande [ et retourne true si les deux opérandes sont égaux. |
string1 == string2 |
Opérateur d’égalité utilisé avec la commande [[ et retourne true si les deux opérandes sont égaux. |
string1 != string2 |
Opérateur d’inégalité qui retourne true si deux opérandes ne sont pas égaux. |
string1 =~ regex |
Opérateur Regex qui retourne true si la chaîne1 correspond à la regex étendue |
string1 > string2 |
Supérieur à l’opérateur qui retourne true si la string1 est supérieure à la string2 en fonction de l’ordre lexicographique (alphabétique) |
string1 < string2 |
Moins que l’opérateur qui retourne true si la string1 est plus petite que la string2 selon l’ordre lexicographique (alphabétique) |
-z string |
Retourne true si la longueur de la string est 0 . |
-n string |
Retourne true si la longueur de la string n’est pas 0 . |
String1="Hello World!!"
String2="Hello World!!"
String3="Delft Stack"
if [ "$String1" = "$String2" ]; then
echo "String1 and String2 are equal."
else
echo "String1 and String2 are not equal."
fi
if [[ "$String1" == "$String2" ]]; then
echo "String1 and String2 are equal."
else
echo "String1 and String2 are not equal."
fi
if [[ "$String1" != "$String3" ]]; then
echo "String1 and String3 are not equal."
else
echo "String1 and String3 are equal."
fi
Production:
String1 and String2 are equal.
String1 and String2 are equal.
String1 and String3 are not equal.
Ici, si nous comparons String1
et String2
en utilisant l’opérateur =
au début. Comme String1
et String2
ont la même longueur avec la même séquence de caractères, l’opérateur de comparaison retourne true
et nous obtenons donc String1 and String2 are equal.
comme sortie du premier bloc if-else
du programme.
De même, dans le second programme, nous comparons String1
et String2
en utilisant l’opérateur ==
. Dans ce cas, nous devons utiliser l’opérateur [[
pour la comparaison.
Enfin, nous comparons String1
et String3
en utilisant l’opérateur !=
.
Comparaison lexicographique en Bash
La comparaison lexicographique consiste à comparer des chaînes de caractères en fonction de l’ordre alphabétique. Pour la comparaison lexicographique, nous utilisons les opérateurs >
et <
.
name1="Kamal"
name2="Abinash"
if [[ "$name1" > "$name2" ]]; then
echo "${name1} is greater then ${name2}."
elif [[ "$name1" < "$name2" ]]; then
echo "${name2} is greater than ${name1}."
else
echo "Both the namees are equal"
fi
Production:
Kamal is greater then Abinash.
Dans ce programme, name1
et name2
sont comparés lexicographiquement. Comme K
vient après A
dans l’ordre alphabétique, K
a une valeur plus élevée que A
et donc "$name1" > "$name2"
retourne true
et nous obtenons Kamal is greater then Abinash.
en sortie.
Vérifier si une chaîne de caractères est vide ou non
Nous utilisons les opérateurs -n
et -z
pour vérifier si la chaîne est vide ou non.
String=""
if [[ -z $String ]]; then
echo "The variable String is an empty string."
fi
Production:
The variable String is an empty string.
Dans ce programme, String
est une variable vide. Comme l’opérateur -z
retourne true
si la longueur de la string
est 0
et donc nous obtenons The variable String is an empty string.
comme sortie du programme donné.
String="Test"
if [[ -n $String ]]; then
echo "The variable String is not an empty string."
fi
Production:
The variable String is not an empty string.
Dans ce programme, String
n’est pas une variable vide. L’opérateur -n
retourne true
si la longueur de la string
n’est pas égale à 0
et nous obtenons donc The variable String is not an empty string.
en sortie du programme donné.
Vérifier si une chaîne contient une sous-chaîne
Pour vérifier si une chaîne de caractères contient une sous-chaîne, nous pouvons utiliser l’opérateur =~
(Regex
).
L’opérateur regex
retourne true
si la chaîne
correspond à l’expression regex
étendue. Nous devons faire une expression regex
appropriée pour la comparaison.
String='My name is Delft.'
if [[ $String =~ .*Delft.* ]]; then
echo "The given string has Delft on it."
fi
Production:
The given string has Delft on it.
Ici, .*Delft.*
est l’expression regex
à comparer, qui dit de correspondre à n’importe quelle chaîne, zéro ou plus de caractères, avant et après Delft.
. Il vérifie si la chaîne contient ou non la sous-chaîne Delft
.
Comme Delft
est présent dans la chaîne donnée, la condition donnée est satisfaite, et nous obtenons The given string has Delft on it.
en sortie.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn