我将如何重新定义和/或定义新的条件表达式原色在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
命令,但这也可能会出现问题。