==
é um alias bash
-específico para =
, que executa uma comparação de sequência (léxica) em vez da comparação numérica -eq
. (É para trás de Perl: os operadores de estilo de palavra são numéricos, os simbólicos são lexicais.)
Estou fazendo uma comparação de inteiros no bash (tentando ver se o usuário está rodando como root), e encontrei duas maneiras diferentes de fazê-lo:
Double é igual a:
if [ $UID == 0 ]
then
fi
-eq
if [ $UID -eq 0 ]
then
fi
Entendo que não há > = ou < = no bash, apenas -ge e -le, então por que há um ==
se houver um -eq
?
Existe alguma diferença na maneira de comparar os dois lados?
Para elaborar a resposta de bollovan ...
Não há nenhum operador de comparação >=
ou <=
para cadeias de caracteres. Mas você poderia usá-los com o comando ((...))
arithmetic para comparar inteiros.
Você também pode usar os outros operadores de comparação de strings ( ==
, !=
, <
, >
, mas não =
) para comparar inteiros se você os usar dentro de ((...))
.
Exemplos
[[ 01 -eq 1 ]]
e (( 01 == 1 ))
. Ambos são verdadeiros. [[ 01 == 1 ]]
quanto [ 01 = 1 ]
fazem comparações de cadeias. Ambos são falsos. (( 01 -eq 1 ))
quanto (( 01 = 1 ))
retornarão um erro. Observação: a sintaxe dos colchetes duplos [[...]]
e a sintaxe dos parênteses duplos ((...))
não são suportadas por todos os shells.
Se você quiser fazer uma comparação com números inteiros, é melhor usar (()), onde você também pode usar > = etc.
Exemplo:
if (( $UID == 0 )); then
echo "You are root"
else
echo "You are not root"
fi
Tags bash shell arithmetic