Bash: double é igual a vs -eq

44

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?

    
por beatgammit 05.07.2011 / 19:24

3 respostas

48

== é 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.)

    
por 05.07.2011 / 19:29
11

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

  • As comparações de números inteiros entre [[ 01 -eq 1 ]] e (( 01 == 1 )) . Ambos são verdadeiros.
  • Tanto [[ 01 == 1 ]] quanto [ 01 = 1 ] fazem comparações de cadeias. Ambos são falsos.
  • Tanto (( 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.

    
por 18.03.2014 / 17:15
5

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
    
por 05.07.2011 / 21:18