如何在while循环中“读取”多个变量

时间:2014-09-18 16:01:22

标签: bash variables while-loop

如何使用while读取行读取多个变量?我试图从这些多行的变量创建一个csv文件。

不确定这是否是最好的方法。

例如:

1st_list=$(..code..)
2nd_list=$(..code..)

while read line_from_1, line_from_2
do
    echo "$line_from_1,$line_from_2" >> outputfile.csv

done < $1st_list,$2nd_list

2 个答案:

答案 0 :(得分:4)

你的问题有点不清楚,但为了从多个源并行读取,你需要使用多个文件描述符,我认为是进程替换。

while read line_from_1; 
      read -u 3 line_from_2; do
    echo "From first: $line_from_1"
    echo "From second: $line_from_2"
done < <( echo "$first_list" ) 3< <(echo "$second_list")

(当然,如果它们不存在,则不必使用这两个变量;只需将填充每个变量的代码放在为while循环提供的适当进程替换中:

done < <( ...code for first list...) 3< <(...code for second list...)

如上所述,只要 second 读取成功(第一次读取的退出状态被忽略),循环就会成功。要成功循环,请使用read line_from_1 && read -u 3 line_from_2

只要 成功,要循环播放,您需要一个稍微复杂的迷你脚本作为while条件:

while read line_from_1; read1=$?;
      read line_from_2; read2=$?;
      (( read1 == 0 || read2 == 0 )); do

更新:如果已经设置了变量来代替过程替换,您也可以简单地使用此处的字符串。 (我不确定3<<<是否合法。)

while read line_from_1; read -u 3 line_from_2; do
    ...
done <<< "$first_line" 3<<< "$second_line"

答案 1 :(得分:2)

假设您想要输出

file1line1,file2line1
file2line2,file2line2
etc.

然后你根本不需要这样的东西,因为paste就是这样。

paste -d, <(echo "$first_list") <(echo "$second_list")