Dependendo da comparação que você fizer o shell considerará os valores como números ou strings. Oberve o exemplo a seguir:
$ x=05 $ y=5 $ [ "$x" -eq "$y" ] $ echo $? $ 0
No exemplo acima foi usada uma comparação númerica ( -eq ), então o shell entendeu que as variáveis "x" e "y" eram números. Como o número 05 é igual ao número 5, a comparação foi verdadeira e o código de retorno da foi zero.
Agora observe:
$ x=05 $ y=5 $ [ "$x" = "$y" ] $ echo $? $ 1
Desta vez foi usada uma comparação de strings ( = ), então o shell entendeu que as variáveis eram strings. Como a string "05" não é igual a string "5", a comparação foi falsa e o código de retorno da foi diferente de zero.