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