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
相关产品推荐
相关产品推荐

