
文字列からテストコマンドを実行しようとしています。文字列に式が含まれています。
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
。