is_dir_empty(){ 对于“$1”中的文件 做 如果 [ "$file" != "$1" ]; 然后 返回 0 菲 完毕 回声“返回1” 返回 1 } 文件="/home/tmp/*.sh" 如果 is_dir_empty "$file"; 然后 回声“空” 否则回显“不为空” 菲
它输出
返回 1 不是空的
所以 is_dir_empty 返回 1 但如果条件以某种方式评估为假......为什么?
因为 shell 脚本遵循 Unix 约定,期望实用程序成功返回零,失败返回非零,所以布尔条件被反转。
Glob 不会在双引号中展开,因此您总是在与文字值进行比较/home/tmp/*.sh
。在 for 循环中取消引用$1
,它会将单词拆分和 glob 扩展为 .sh 文件列表(此在线工具会自动指出这一点)。
此外,与 C 不同,零被认为是成功和非零失败。
您可以通过以下方式检查目录是否为空:
[ "$(ls -A /path/to/directory)" ] && echo "Not Empty" || echo "Empty"