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

如何将单行带双引号的路径条目加载到Bash 5.2+数组并展开通配符?

解决方案

1. 提取双引号内的路径到原始数组

先将单行文本中每个双引号包裹的路径提取出来,存入Bash数组,提供两种实现方式:

方法A:纯Bash内置处理(无外部工具)

利用Bash正则匹配循环提取内容:

# 读取文件内容到变量
path_content=$(<paths.txt)

# 初始化原始路径数组
raw_paths=()

# 循环匹配所有双引号包裹的内容
while [[ $path_content =~ \"([^\"]*)\" ]]; do
    raw_paths+=("${BASH_REMATCH[1]}")
    # 移除已匹配部分,继续处理剩余内容
    path_content=${path_content#*\"${BASH_REMATCH[1]}\"}
done

方法B:借助xargs快速拆分

利用xargs自动解析引号的特性拆分内容:

# 读取文件内容,通过xargs拆分后用mapfile存入数组
mapfile -t raw_paths < <(xargs -n1 <<< "$(cat paths.txt)")

2. 通配符展开匹配实际文件/文件夹

Bash 5.2+支持globstar(递归匹配子目录)和nullglob(无匹配时返回空而非原字符串),先启用这些选项,再遍历原始路径完成通配符展开:

# 启用通配符特性
shopt -s globstar nullglob

# 初始化最终匹配结果数组
final_paths=()

# 遍历原始路径,展开通配符并收集实际存在的条目
for raw_path in "${raw_paths[@]}"; do
    # 不加引号遍历,触发Bash通配符展开
    for matched_item in $raw_path; do
        final_paths+=("$matched_item")
    done
done

关键说明

  • globstar:允许用**递归匹配所有子目录(若路径包含该通配符)
  • nullglob:若通配符无匹配结果,不会将原路径字符串加入数组,避免无效条目
  • 遍历$raw_path时不加引号触发通配符展开;存入数组时加引号,确保带空格的路径不被拆分

验证结果

执行以下命令查看最终数组内容:

for item in "${final_paths[@]}"; do
    echo "匹配到:$item"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:24:58