Cómo comparar las cadenas en Bash

Suraj Joshi 11 marzo 2021
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 avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn