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

POSIX Shell中如何将通配符展开结果赋值给变量(不使用数组)

不用数组和echo,原生Bash展开通配符到变量的最优方法

直接通过原生赋值即可实现,无需调用外部命令,也不用数组:

# 可选配置:当无匹配文件时让变量为空,避免保留原始通配符字符串
shopt -s nullglob
debs="${builds}/${name}/${version}"_*.deb

为什么之前的尝试失败:

  • 直接赋值未生效(参考SC2125):默认情况下,如果通配符没有匹配到任何文件,Bash会保留通配符本身作为变量值,而非空值。开启nullglob选项可以解决这个问题,让变量在无匹配时为空。
  • 参数展开: ${debs:=...}不生效:这种参数展开语法会把右侧内容当作字面量处理,不会触发通配符解析,所以无法实现路径匹配。
  • $(echo ...)的方式虽然可行,但属于冗余操作——Bash本身支持原生通配符展开,没必要调用外部的echo命令。

如果不想全局启用nullglob,可以用完后立即关闭,避免影响脚本其他部分:

shopt -s nullglob
debs="${builds}/${name}/${version}"_*.deb
shopt -u nullglob

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:20:28