如何在 Bash 中定义自定义条件表达式原色?

如何在 Bash 中定义自定义条件表达式原色?

我将如何重新定义和/或定义新的条件表达式原色在bash中?例如,我想要一个主数据库来测试是否存在空目录。当然,最好只使用一个主选来完成此操作,但如果不可能,那么两个主选也是可以接受的。举个例子,我希望能够实现这一点:

    if [ -DZ $HOME/dir ]; # true if directory the path is an empty directory
      then echo "$HOME/dir doesn't have any non-hidden files or directories!"
    fi

答案1

要添加您自己的test谓词,您必须修改bash内置[命令的源。这可能不是您想要做的,因为它会导致不可移植的脚本。您可以改为使用 shell 函数:

isemptydir () (
    shopt -s nullglob
    shopt -s dotglob

    if [ -z "$1" ]; then
        echo 'isemptydir: Empty or missing argument' >&2
        return 1

        # could instead do: set .
        # this would use the current directory as the "default" one
    fi

    if [ -d "$1" ]; then
        # note: above test fails on inaccessible dirs --> "not empty"

        set -- "${1%/}"/*
        [ "$#" -eq 0 ]
        # note: above test succeeds on unlistable dirs --> "empty"           
    fi
)

if isemptydir "$mydir"; then
    printf 'Directory "%s" is empty\n' "$mydir"
else
    printf '"%s" is not a directory, or is not empty\n' "$mydir"
fi

该函数测试给定的参数是否是目录的名称。如果是,它会计算目录中可用的名称(不仅仅是文件)的数量,包括隐藏名称,并将其与零进行比较。最后执行的测试的返回状态是函数的返回状态。


您可以使用自己的函数重载[test命令,但这也可能会出现问题。

相关内容