Cómo comparar las cadenas en Bash
Podemos comparar las cadenas utilizando varios operadores de comparación y comprobar si la cadena contiene subcadena o no utilizando las expresiones regulares.
Comparación de cadenas en Bash
Comparación de cadenas significa comprobar si las cadenas dadas son las mismas o no. Dos o más cadenas son iguales si tienen la misma longitud y contienen la misma secuencia de caracteres.
Utilizamos varios operadores de comparación de cadenas que devuelven verdadero o falso dependiendo de la condición. Algunos de los operadores de comparación de cadenas ampliamente utilizados podrían ser listados como:
string1 = string2 |
El operador de igualdad se usa con “comando” y devuelve true si ambos operandos son iguales. |
string1 == string2 |
El operador de igualdad se usa con comando [[ y devuelve true si ambos operandos son iguales. |
string1 != string2 |
Operador de desigualdad que devuelve true si dos operandos no son iguales. |
string1 =~ regex |
El operador Regex que devuelve true si la string1 coincide con el regex extendido. |
string1 > string2 |
Mayor que el operador que devuelve true si la string1 es mayor que la string2 en base al orden lexicográfico (alfabético). |
string1 < string2 |
Menos que el operador que devuelve true si la string1 es más pequeña que la string2 basado en el orden lexicográfico (alfabético). |
-z string |
Devuelve true si la longitud de la string es 0 . |
-n string |
Devuelve true si la longitud de la string no es 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
Resultado:
String1 and String2 are equal.
String1 and String2 are equal.
String1 and String3 are not equal.
Aquí, si comparamos String1
y String2
usando el operador =
al principio. Como String1
y String2
tienen la misma longitud con la misma secuencia de caracteres, el operador de comparación devuelve true
y por lo tanto obtenemos String1 and String2 are equal.
como salida del primer bloque if-else
del programa.
De manera similar, en el segundo programa, comparamos la String1
y la String2
usando el operador ==
. Necesitamos usar [[
para la comparación en este caso.
Finalmente, comparamos la String1
y la String3
usando el operador !=
.
Comparación lexicográfica en Bash
La comparación lexicográfica significa comparar cadenas basadas en el orden alfabético. Para la comparación lexicográfica, usamos los operadores >
y <
.
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
Resultado:
Kamal is greater then Abinash.
En este programa, name1
y name2
se comparan lexicográficamente. Como K
viene después de A
en el orden alfabético, K
tiene un valor más alto que A
y por lo tanto "$name1" > "$name2"
devuelve true
y obtenemos Kamal is greater then Abinash.
como salida.
Comprueba si una cadena está vacía o no
Usamos operadores -n
y -z
para comprobar si la cadena está vacía o no.
String=""
if [[ -z $String ]]; then
echo "The variable String is an empty string."
fi
Resultado:
The variable String is an empty string.
En este programa, String
es una variable vacía. Como el operador -z
devuelve true
si la longitud de string
es 0
y por lo tanto obtenemos The variable String is an empty string.
como una salida del programa dado.
String="Test"
if [[ -n $String ]]; then
echo "The variable String is not an empty string."
fi
Resultado:
The variable String is not an empty string.
En este programa, String
no es una variable vacía. El operador -n
devuelve true
si la longitud de la string
no es 0
y por lo tanto obtenemos The variable String is not an empty string.
como una salida del programa dado.
Comprueba si una cadena contiene subcadena
Para comprobar si una cadena contiene una subcadena, podemos usar el operador =~
(Regex
).
El operador regex
devuelve true
si la string
coincide con la expresión regex
extendida. Debemos hacer una expresión regex
apropiada para la comparación.
String='My name is Delft.'
if [[ $String =~ .*Delft.* ]]; then
echo "The given string has Delft on it."
fi
Resultado:
The given string has Delft on it.
Aquí, .*Delft.*
es la expresión regex
que se debe comparar, que dice que coincida con cualquier cadena, cero o más caracteres, antes y después de Delft
. Comprueba si la cadena tiene la subcadena Delft
o no.
Como Delft
está presente en la cadena dada, la condición dada se satisface, y obtenemos The given string has Delft on it.
como salida.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn