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

如何在Bash中遍历数组并提取双列文本值分别输出

解决数组遍历与值拆分问题

问题根源

你的代码存在两个核心错误:

  1. 循环逻辑错误:for i in "${array[@]}" 中,i 是数组的元素值(如1、2、3),而非索引,用 ${array[$i]} 会把元素值当成索引取数,完全偏离预期。
  2. 自增操作无效:i++ 在这种for循环中不会改变下一次迭代的i值,因为每次循环i都会被重新赋值为数组的下一个元素。

解决方案

以下两种方法都能实现你的期望输出:

方法一:按行读取后拆分每行数据

先将文件的每一行作为数组元素,再用逗号拆分每行得到val1和val2:

# 按行读取文件到数组,每行作为一个独立元素
readarray -t array < test_inputs.txt

# 遍历每个行元素
for line in "${array[@]}"; do
    # 用逗号分隔拆分出两个值
    IFS=, read -r val1 val2 <<< "$line"
    echo "val1: $val1 and val2: $val2"
done

方法二:基于原数组结构按索引步长遍历

保持你原有的数组读取方式(元素为单个数字),通过索引每次步进2来配对val1和val2:

# 原读取方式,数组元素为单个数字:1、2、3、4、10、30
IFS=,$'\n' read -d '' -r -a array < test_inputs.txt

# 从索引0开始,每次递增2遍历数组
for ((i=0; i<${#array[@]}; i+=2)); do
    val1=${array[i]}
    val2=${array[i+1]}
    echo "val1: $val1 and val2: $val2"
done

执行任意一种方法,都能得到你想要的输出:

val1: 1 and val2: 2
val1: 3 and val2: 4
val1: 10 and val2: 30

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:21:49