Linuxの単純なフラグベースの比較

Linuxの単純なフラグベースの比較

フラグやその他の条件を確認する簡単なスクリプトを実行しようとしています。フラグの値にかかわらず、以下は常に「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として解釈されることを望み、これは他の句とうまく機能します。 (これは変数が常にまたはに設定されていると仮定します。)truefalse&&[ ... ]truefalse

初期テストが期待どおりに行われなかった理由は、次のtest文書で確認できます[

-n STRING
       the length of STRING is nonzero

STRING equivalent to -n STRING

ここには特別な意味がないのでfalse、ただ空でない文字列として扱われ、真理値と解釈されます。

おすすめ記事