hfr*_*nco 1 variables bash while-loop
如何使用 while read 行读取多个变量?我正在尝试从这些多行变量创建一个 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
Run Code Online (Sandbox Code Playgroud)
您的问题有点不清楚,但是为了并行从多个源读取,您需要使用多个文件描述符,并且我认为需要使用进程替换。
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")
Run Code Online (Sandbox Code Playgroud)
(当然,如果这两个变量不是预先存在的,则不必使用它们;只需将填充每个变量的代码放入为循环提供数据的适当进程替换中即可while:
done < <( ...code for first list...) 3< <(...code for second list...)
Run Code Online (Sandbox Code Playgroud)
)
正如所写,只要第二次读取成功,循环就会成功(忽略第一次读取的退出状态)。要在两者都成功时循环,请使用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
Run Code Online (Sandbox Code Playgroud)
更新:如果已经设置变量来代替流程替换,您也可以简单地使用此处的字符串。(我不确定是否3<<<合法。)
while read line_from_1; read -u 3 line_from_2; do
...
done <<< "$first_line" 3<<< "$second_line"
Run Code Online (Sandbox Code Playgroud)