Capturando código de retorno com teste []

1

Se eu executar isso:

#!/usr/bin/env bash

simple_return_zero(){
  return 0;
}

simple_return_one(){
  return 1;
}

if [ simple_return_zero ]; then
   echo "we have 0000";
fi

if [ ! simple_return_zero ]; then
   echo "we have not 00000";
fi

if [ simple_return_one ]; then
   echo "we have 11111";
fi

if [ ! simple_return_one ]; then
   echo "we have not 11111";
fi

Eu recebo:

we have 0000
we have 11111

Sei que o código acima é errado, acho que esse é o jeito certo de fazer isso:

if simple_return_zero; then
   echo "we have 0000";
fi

if ! simple_return_zero; then
   echo "we have not 00000";
fi

if simple_return_one; then
   echo "we have 11111";
fi

if ! simple_return_one; then
   echo "we have not 11111";
fi

e agora temos algo mais esperado:

we have 0000
we have not 11111

Minha pergunta é: por que o comando de teste ([]) não funciona neste caso? O comando de teste não verifica códigos de saída / códigos de retorno?

    
por Alexander Mills 14.06.2018 / 02:41

1 resposta

2

Doesn't the test command check for exit codes / return codes???

Absolutamente não. Realiza o teste conforme definido pelo texto entre parênteses, cuja sintaxe pode ser visualizada via help test .

if em suas próprias verificações o código de retorno do comando executado.

    
por 14.06.2018 / 02:46