フラグやその他の条件を確認する簡単なスクリプトを実行しようとしています。フラグの値にかかわらず、以下は常に「Run script..」をエコーします。
FLAG_Control=false
if [ $FLAG_Control ] && [ -d /path/to/dir ];then
echo "Run script.."
fi
これは期待どおりに機能しますが:
FLAG_Control=false
if [ $FLAG_Control = true ] && [ -d /path/to/dir ];then
echo "Run script.."
fi
これは明示的な比較をしなければならないことを意味しますか?私が最初に何か間違っているのでしょうか?
ベストアンサー1
を試してくださいif $FLAG_Control && [ -d /path/to/dir ]; ...
。角括弧はif
;構文の一部ではありません。この場合、コマンド(または)$FLAG_Control
として解釈されることを望み、これは他の句とうまく機能します。 (これは変数が常にまたはに設定されていると仮定します。)true
false
&&
[ ... ]
true
false
初期テストが期待どおりに行われなかった理由は、次のtest
文書で確認できます[
。
-n STRING
the length of STRING is nonzero
STRING equivalent to -n STRING
ここには特別な意味がないのでfalse
、ただ空でない文字列として扱われ、真理値と解釈されます。