6
is_dir_empty(){

    对于“$1”中的文件
    做
        如果 [ "$file" != "$1" ]; 然后
            返回 0
        菲
    完毕
    回声“返回1”
    返回 1
}

文件="/home/tmp/*.sh"

如果 is_dir_empty "$file"; 然后
    回声“空”
否则回显“不为空”
菲

它输出

返回 1
不是空的

所以 is_dir_empty 返回 1 但如果条件以某种方式评估为假......为什么?

4

3 回答 3

9

因为 shell 脚本遵循 Unix 约定,期望实用程序成功返回零,失败返回非零,所以布尔条件被反转。

于 2013-02-05T01:47:33.263 回答
2

Glob 不会在双引号中展开,因此您总是在与文字值进行比较/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 回答