如何在Bash中遍历数组并提取双列文本值分别输出
解决数组遍历与值拆分问题
问题根源
你的代码存在两个核心错误:
- 循环逻辑错误:
for i in "${array[@]}"中,i是数组的元素值(如1、2、3),而非索引,用${array[$i]}会把元素值当成索引取数,完全偏离预期。 - 自增操作无效:
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
相关产品推荐
相关产品推荐

