在bash脚本中使用if和boolean函数:if当函数返回true时,condition的计算结果为false

时间:2013-02-05 01:37:22

标签: bash function

is_dir_empty(){

    for file in "$1"
    do
        if [ "$file" != "$1" ]; then
            return 0
        fi
    done
    echo "return 1"
    return 1
}

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

if is_dir_empty "$file"; then
    echo "empty"
else echo "not empty"
fi

输出

return 1
not empty

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

全局不会以双引号扩展,因此您总是与文字值/home/tmp/*.sh进行比较。在for循环中取消引用$1,它将单词split和glob扩展为.sh文件列表(this online tool会自动指出这一点)。

此外,与C不同,零被认为是成功和非零失败。

答案 2 :(得分:0)

您可以通过以下方式检查目录是否为空:

[ "$(ls -A /path/to/directory)" ] && echo "Not Empty" || echo "Empty"