You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Shell脚本中用通配符判断文件不存在的报错?

修复方案

原命令的问题在于错误地将compgen命令放在了[ ](test命令)内部,test只能处理自身支持的表达式,无法直接执行外部命令。以下是两种可行的修复方式:

方式一:直接利用compgen的退出状态码

compgen -G会在匹配到目标文件时返回0(成功),未匹配到则返回非零(失败),直接通过!取反判断即可:

if ! compgen -G "$DIR/*.tar.gz" > /dev/null; then
    # 替换为你需要执行的命令
    commands
fi

方式二:通用shell数组判断(兼容更多shell环境)

如果你的环境中没有compgen(比如部分非bash shell),可以用通配符结合数组的方式判断:

# 开启nullglob选项:通配符无匹配时展开为空而非原字符串
shopt -s nullglob
# 将匹配到的tar.gz文件存入数组
files=("$DIR"/*.tar.gz)
# 关闭nullglob选项恢复默认行为
shopt -u nullglob

# 判断数组长度是否为0(即无匹配文件)
if [ ${#files[@]} -eq 0 ]; then
    # 替换为你需要执行的命令
    commands
fi

额外注意

如果需要确保$DIR是一个存在的目录,可以在判断前增加目录检查:

if [ -d "$DIR" ] && ! compgen -G "$DIR/*.tar.gz" > /dev/null; then
    commands
fi

内容的提问来源于stack exchange,提问作者user9890324

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:02:35