6
is_dir_empty(){

    「$1」のファイルの場合
    行う
        if ["$ file"!= "$ 1"]; それから
            0を返す
        fi
    終わり
    エコー「リターン1」
    リターン1
}

file = "/ home / tmp/*。sh"

is_dir_empty"$file"の場合; それから
    エコー「空」
それ以外の場合は「空ではない」とエコーします
fi

出力します

リターン1
空ではない

したがって、is_dir_emptyは1を返しましたが、条件がなんらかの理由でfalseと評価された場合....なぜですか?

4

3 に答える 3

9

シェルスクリプトは、ユーティリティが成功の場合はゼロを返し、失敗の場合はゼロ以外を返すことを期待するUnixの規則に従うため、ブール条件が逆になります。

于 2013-02-05T01:47:33.263 に答える
2

グロブは二重引用符で囲まれて展開されないため、常にリテラル値と比較しています/home/tmp/*.sh。forループで引用符を外す$1と、単語が分割され、globが.shファイルのリストに展開されます(このオンラインツールはこれを自動的に指摘します)。

また、Cとは異なり、ゼロは成功と見なされ、ゼロ以外の失敗と見なされます。

于 2013-02-05T01:53:12.817 に答える
0

ディレクトリが空かどうかは、次の方法で確認できます。

[ "$(ls -A /path/to/directory)" ] && echo "Not Empty" || echo "Empty"
于 2013-02-05T07:18:02.923 に答える