O comando de teste no unix não imprime uma saída

17

Quando eu digito isso no terminal

test 4 -lt 6

Eu não recebo nenhuma saída. Por que não? Preciso que 0 ou 1

    
por indieman 11.10.2012 / 09:23

4 respostas

14

Você recebe 0 ou 1. No código de saída.

bash-4.2$ test 4 -lt 6

bash-4.2$ echo $?
0

bash-4.2$ test 4 -gt 6

bash-4.2$ echo $?
1

Atualizar : para armazenar o código de saída para uso posterior, basta atribuí-lo a uma variável:

bash-4.2$ test 4 -lt 6

bash-4.2$ first=$?

bash-4.2$ test 4 -gt 6

bash-4.2$ second=$?

bash-4.2$ echo "first test gave $first and the second $second"
first test gave 0 and the second 1
    
por 11.10.2012 / 09:25
5

Outra maneira é

test 4 -lt 6 && echo 1 || echo 0

Mas tenha cuidado nesse caso. Se test retornar sucesso e echo 1 falhar echo 0 será executado.

    
por 11.10.2012 / 10:27
2

Se você quiser o resultado de uma comparação no código padrão, em vez de um código de saída, use o comando expr(1) :

$ expr 4 '<=' 6
1

Duas coisas a serem observadas:

  1. você provavelmente precisará citar o operador, pois muitos deles entram em conflito com os metacaracteres do shell
  2. o valor de saída é o oposto do código de retorno para test . test retorna 0 para true (que é o padrão para códigos de saída), mas expr imprime 1 para true.
por 11.10.2012 / 13:06
1

Você pode digitar o seguinte comando:

echo $(test -e myFile.txt) $?
    
por 27.10.2016 / 18:02