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但是如果条件评估为假某种原因......为什么?
答案 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"