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

如何在脚本中使用带通配符与变量的cd命令进入唯一匹配目录?

实现唯一匹配目录的cd命令通用方法

通用实现方案

方法一:数组校验法(推荐)

先把符合模式的目录路径存入数组,通过判断数组长度确保只有唯一匹配项,再执行cd操作。这种方式能处理无匹配、多匹配的异常情况,避免脚本报错:

# 将匹配的目录存入数组
dirs=(build_dir/target*/"$1"*)

# 校验匹配结果
if [ ${#dirs[@]} -eq 0 ]; then
    echo "错误:未找到符合模式的目录" >&2
    exit 1
elif [ ${#dirs[@]} -gt 1 ]; then
    echo "错误:找到多个匹配目录:${dirs[*]}" >&2
    exit 1
fi

# 进入唯一匹配的目录
cd "${dirs[0]}"

这种写法的优势是显式校验匹配数量,杜绝模糊匹配带来的意外问题,适合严谨的脚本场景。

方法二:配合nullglob优化(Bash 4.0+可用)

如果你的Bash版本在4.0及以上,可以开启nullglob选项,让无匹配时返回空值,避免数组中出现无效的模式字符串:

# 开启nullglob选项
shopt -s nullglob
dirs=(build_dir/target*/"$1"*)
# 用完后关闭,避免影响后续命令
shopt -u nullglob

# 后续校验和cd逻辑与方法一完全一致

方法三:简化版(仅适用于确定唯一匹配的场景)

如果你能完全保证每次只有一个目录符合模式,也可以用命令替换快速实现,但这种方式没有校验逻辑,出错时难以排查:

cd "$(echo build_dir/target*/"$1"*)"

不推荐在生产环境脚本中使用这种写法,一旦出现多匹配情况,会把所有目录名拼接后传给cd,直接触发错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:08:16