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 retornotruese ambos os operandos forem iguais. | 
| string1 == string2 | Operador de igualdade utilizado com [[comando e retornotruese ambos os operandos forem iguais. | 
| string1 != string2 | Operador de desigualdade que retorna truese dois operandos não forem iguais. | 
| string1 =~ regex | Operador Regexque retornatruese astring1corresponder àregexestendida. | 
| string1 > string2 | Maior que o operador que retorna truese astring1for maior questring2baseado na ordem lexicográfica (alfabética) | 
| string1 < string2 | Menos que o operador que retorna truese astring1for menor questring2baseado na ordem lexicográfica (alfabética) | 
| -z string | Devolver truese o comprimento dostringfor0. | 
| -n string | Devolver truese o comprimento dostringnão for0. | 
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 is a backend software engineer at Matrice.ai.
LinkedIn