O comando Expr retorna falso

3

Estou tentando usar esta linha de comando

expr 916.1 '<' 1024

Mas recebo uma resposta false (retorno 1)

    
por khiat abdelhamid 18.09.2017 / 13:24

1 resposta

12

expr não suporta números de ponto flutuante:

  

Os operandos são números inteiros ou cadeias. Inteiros consistem em um ou   mais dígitos decimais, com um cabeçalho opcional "-". expr converte   qualquer coisa que apareça em uma posição de operando para um inteiro ou uma string   dependendo da operação que está sendo aplicada a ele.

E :

  

O expr primeiro tenta converter ambos os argumentos em inteiros e faz um   comparação numérica; se qualquer das conversões falhar,   Comparação lexicográfica usando a sequência de ordenação de caracteres   especificado pela localidade LC_COLLATE.

Se você quiser comparar floats, use algo como bc (que usa a convenção "0 é falsa, 1 é verdadeira"):

expr1 < expr2
      The result is 1 if expr1 is strictly less than expr2.

Então:

$ bc <<< '(916.1 < 1024)'
1
$ if [ "$(bc <<< '(916.1 < 1024)')" -eq 1 ]; then echo yes; else echo no; fi
yes
    
por muru 18.09.2017 / 13:40