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

如何从文件名通配符创建可能为空的数组(Bash环境适配)

在Bash中处理无匹配Glob生成空数组的问题

要在Bash里实现「当文件名通配符(glob)无匹配时生成空数组,有匹配时则包含所有匹配条目」的需求,核心是开启Bash的nullglob shell选项——这个选项专门用来处理无匹配的glob模式:

基础实现方法

直接开启nullglob后再定义数组即可:

# 开启nullglob选项:无匹配的glob会被移除,而非保留原字符串
shopt -s nullglob

# 用glob赋值数组:无匹配时pathlist是空数组,有匹配时包含所有文件路径
pathlist=(/no/such/path/*)

# 可选:如果不想让nullglob影响后续脚本逻辑,用完后关闭它
shopt -u nullglob

更稳妥的写法(避免全局选项污染)

如果你的脚本其他部分依赖默认的glob行为,建议先保存nullglob的原始状态,用完后恢复:

# 保存当前nullglob的设置状态
original_nullglob=$(shopt -p nullglob)

# 开启nullglob
shopt -s nullglob

# 赋值数组
pathlist=(/no/such/path/*)

# 恢复之前的nullglob状态
eval "$original_nullglob"

补充说明

  • nullglob是Bash的特有特性,不属于POSIX标准,所以如果你的脚本需要兼容POSIX Shell,可能需要用其他方法(比如先判断glob是否有匹配再赋值,但复杂度会高很多)。
  • 开启nullglob后,所有后续的glob都会遵循「无匹配则移除」的规则,所以如果不是全局需要这个行为,记得及时关闭或者用上述的状态保存方法隔离影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:21:03