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

Bash如何读取双列文本变量逐行拼接生成指定格式路径

问题解决:Bash逐行读取两列文件拼接生成路径

你写的双重循环会遍历两个变量的所有排列组合,无法实现一行的两个字段一一对应,所以不符合需求。

方案1:逐行读取(最推荐)

逻辑简单,兼容大部分场景,不需要额外处理数组长度匹配问题:

# 先输出模板路径
echo "/home/user/var1/var2/"
# 逐行读取file.txt的两列内容
while read -r var1 var2; do
  echo "/home/user/${var1}/${var2}/"
done < file.txt

说明:read -r var1 var2 会自动把每一行按空白分割,第一个字段赋值给var1,第二个赋值给var2,刚好匹配你的file.txt格式,-r 参数用来避免转义字符被特殊处理,建议常规场景都加上。

方案2:数组按索引遍历(沿用你原思路的修改版)

如果你想保留数组读取的写法,可以统一按索引遍历两个数组,实现逐行对应:

# 数组赋值等号两边不能有空格
var1=($(cut -f1 file.txt))
var2=($(cut -f2 file.txt))

# 先输出模板路径
echo "/home/user/var1/var2/"
# 按索引遍历,确保两列字段一一对应
for ((idx=0; idx<${#var1[@]}; idx++)); do
  echo "/home/user/${var1[idx]}/${var2[idx]}/"
done

注意:该方案需要保证file.txt每行都有两列内容,两个数组长度一致,否则会出现错位。

原代码的其他语法问题修正

  • 数组赋值时等号两边不能有空格,你写的var1 = (cut -f1 file.txt)属于语法错误,正确写法是var1=($(cut -f1 file.txt))
  • 输出路径时漏掉了根目录的前缀/,你写的echo home/user/$i/$j/生成的是相对路径,要改成echo /home/user/$i/$j/才能得到你需要的绝对路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:24:02