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 is a backend software engineer at Matrice.ai.
LinkedIn