O que está acontecendo com minha comparação 'if' no bash?

3

entrada de bash:

if [[ 167 > 10800 ]]
then
    echo "I can't compare"
fi

saída bash:

I can't compare

Eu acho que a pergunta é bem óbvia ...

    
por Mehrdad 21.07.2011 / 23:07

3 respostas

7

Para citar a partir da página de manual bash(1) :

When used with [[, the < and > operators sort lexicographically using the current locale.

Portanto, 167 é de fato maior que 10800, já que 6 é um caractere ASCII maior que 0.

    
por 21.07.2011 / 23:18
8

O caractere > não funciona para o tipo de comparação desejado. Você tem que usar -gt :

if [[ 167 -gt 10800 ]]
then
    echo "I can't compare"
fi

E se você quiser fazer uma comparação menor do que a comparação, será necessário fazer -lt . Para ver as outras opções que você precisa fazer para comparação, consulte a test manpage .

    
por 21.07.2011 / 23:17
6

Use colchetes curvos para uma comparação numérica verdadeira

if (( 167 > 10800 ))
then
    echo "I can't compare"
fi

Bom resumo aqui: link

    
por 21.07.2011 / 23:23