Executando um teste com expressão em uma string

2

Estou tentando executar o comando test a partir de uma string. A string contém a expressão.

 TEST="! -e ~/bin/xyz"
 if [ 'echo "$TEST"' ]; then
    echo running "$TEST";
 fi

No entanto, a condição if acima é avaliada como true, mas se eu conectar o comando diretamente (como abaixo), ele será avaliado como false.

 if [ ! -e ~/bin/xyz ]; then
    echo running;
 fi

O comportamento do segundo snippet está correto. Por que há uma diferença e também como posso corrigir o primeiro snippet para me dar o resultado correto?

    
por Ashwin 04.11.2018 / 06:46

1 resposta

3

O problema com o primeiro exemplo é que você está testando se a string que echo retorna tem comprimento diferente de zero. Uma solução para este problema é a expressão testada eval uate:

TEST="! -e ~/bin/xyz"
if eval "[ $TEST ]"; then
   echo running "$TEST";
fi

Note, que os suportes estão dentro eval , devido [ é um comando, por isso avaliamos este comando em conjunto com a variável $TEST como seu argumento.

    
por 04.11.2018 / 07:36