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

Shell脚本Zip文件遍历循环异常:无文件时仍执行

问题分析与解决方法

问题根源

Bash默认行为中,当通配符(如*.zip)未匹配到任何文件时,不会展开通配符,而是将其作为原始字符串传入循环,导致循环把/Users/Docs_2020/ZIP/XML/*.zip当作一个文件处理,从而执行循环体。

解决方案

方法一:开启nullglob选项

开启Bash的nullglob选项后,通配符在无匹配文件时会展开为空字符串,循环因没有遍历对象而直接跳过。修改后的脚本如下:

#!/bin/bash

# 启用nullglob选项
shopt -s nullglob

FROM_XML_ZIPS=/Users/Docs_2020/ZIP/XML/*.zip

echo "testing .zip files now"
for f in $FROM_XML_ZIPS;
do
  echo "validating $f"
done

# 若需恢复默认行为,可关闭nullglob
# shopt -u nullglob

方法二:提前检查匹配文件

如果需要兼容不支持nullglob的Shell环境,可以先通过compgen命令检查是否存在匹配文件,再决定是否执行循环:

#!/bin/bash

FROM_XML_ZIPS=/Users/Docs_2020/ZIP/XML/*.zip

echo "testing .zip files now"
# 检查是否有匹配的.zip文件
if compgen -G "$FROM_XML_ZIPS" > /dev/null; then
  for f in $FROM_XML_ZIPS;
  do
    echo "validating $f"
  done
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:15:37