如何实现Bash数组值与文件名一一对应写入文件?
解决Bash脚本中值与文件一一对应写入的问题
嗨,你的问题出在嵌套循环上——原代码里的两层for循环会把每一个值都遍历写入到每一个文件里,自然就出现了所有值都进每个文件的情况。要实现第一个值对应第一个文件、第二个对应第二个的效果,我们需要按数组索引来一一匹配,而不是交叉遍历。
修改后的代码
#!/usr/bin/env bash value[0]=5.85 value[1]=3.87 value[2]=4.35 names_files=( EU EUA PT ) date="08-03-2020" # 按数组索引循环,确保值和文件一一对应 for ((i=0; i<${#value[@]}; i++)) do current_value=${value[$i]} current_file=${names_files[$i]} echo "$date|$current_value" >> ./teste2/$current_file.dat done
关键说明
- 用
${#value[@]}获取value数组的长度,这样循环次数会自动匹配数组元素数量(这里是3次) - 通过索引
$i同时获取value和names_files数组中对应位置的元素,实现一对一写入 - 如果你后续需要扩展数组长度,只要保证两个数组的元素数量一致,这段代码就能自动适配
内容的提问来源于stack exchange,提问作者Gonçalo Bastos
相关产品推荐
相关产品推荐

