文字列の式を使用してテストを実行する

文字列の式を使用してテストを実行する

文字列からテストコマンドを実行しようとしています。文字列に式が含まれています。

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

ただし、上記のif条件はtrueと評価されますが、次のようにコマンドを直接挿入するとfalseと評価されます。

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

2番目の部分の動作は正確です。違いがあるのはなぜですか、正しい結果を得るために最初のスニペットを修正するにはどうすればよいですか?

ベストアンサー1

最初の例の問題は、返された文字列のecho長さがゼロでないことをテストすることです。この問題を解決する1つの方法は、evalテストされた式を使用することです。

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

角かっこは内部にあり、これはコマンドなevalので、[引数である変数と一緒にコマンドを評価します$TEST

おすすめ記事