Como comparar strings em Bash

Suraj Joshi 6 fevereiro 2021
Como comparar strings em Bash

Podemos comparar as strings usando vários operadores de comparação e verificar se a string contém ou não substring usando as expressões regulares.

Comparação de strings em Bash

A comparação de strings significa verificar se as strings dadas são as mesmas ou não. Duas ou mais strings são as mesmas se tiverem o mesmo comprimento e contiverem a mesma seqüência de caracteres.

Utilizamos vários operadores de comparação de strings que retornam verdadeiros ou falsos, dependendo da condição. Alguns dos operadores de comparação de strings amplamente utilizados poderiam ser listados como:

string1 = string2 Operador de igualdade utilizado com [ comando e retorno true se ambos os operandos forem iguais.
string1 == string2 Operador de igualdade utilizado com [[ comando e retorno true se ambos os operandos forem iguais.
string1 != string2 Operador de desigualdade que retorna true se dois operandos não forem iguais.
string1 =~ regex Operador Regex que retorna true se a string1 corresponder à regex estendida.
string1 > string2 Maior que o operador que retorna true se a string1 for maior que string2 baseado na ordem lexicográfica (alfabética)
string1 < string2 Menos que o operador que retorna true se a string1 for menor que string2 baseado na ordem lexicográfica (alfabética)
-z string Devolver true se o comprimento do string for 0.
-n string Devolver true se o comprimento do string não for 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.

Aqui, se compararmos String1 e String2 utilizando o operador = no início. Como String1 e String2 têm ambos o mesmo comprimento com a mesma seqüência de caracteres, o operador de comparação retorna true e, portanto, obtemos String1 e String2 são iguais. como saída do primeiro bloco if-else do programa.

Da mesma forma, no segundo programa, comparamos String1 e String2 utilizando o operador ==. Neste caso, precisamos utilizar [[ para comparação.

Finalmente, comparamos String1 e String3 utilizando o operador !=.

Comparação Lexicográfica em Bash

A comparação Lexicográfica significa comparar strings com base na ordem alfabética. Para a comparação lexicográfica, utilizamos operadores > e <.

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.

Neste programa, name1 e name2 são comparados lexicograficamente. Como K vem depois de A na ordem alfabética, K tem um valor maior que A e, portanto, "$name1" > "$name2" retorna true e obtemos Kamal is greater then Abinash. como saída.

Verifique se uma string está vazia ou não

Utilizamos operadores -n e -z para verificar se a string está vazia ou não.

String=""
if [[ -z $String ]]; then
  echo "The variable String is an empty string."
fi

Resultado:

The variable String is an empty string.

Neste programa, String é uma variável vazia. Como operador -z retorna true se o comprimento da string é 0 e, portanto, obtemos The variable String is an empty string. como uma saída do 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.

Neste programa, String não é uma variável vazia. Como -n operador retorna true se o comprimento de string não for 0 e, portanto, obtemos The variable String is not an empty string. como uma saída do programa dado.

Verifique se uma String contém uma Substring

Para verificar se uma string contém um substrato, podemos utilizar o operador =~ (Regex).

O operador regex retorna true se a string corresponder à expressão extendida regex. Devemos fazer uma expressão apropriada de regex para comparação.

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.

Aqui, .*Delft.* é a expressão regex a ser comparada, que diz corresponder a qualquer string, zero ou mais caracteres, antes e depois de Delft.. Ela verifica se a string tem ou não substrato Delft nela.

Como Delft está presente na string dada, a condição dada é satisfeita, e obtemos The given string has Delft on it. como uma saída.

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn