Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 我如何“;读取”;while循环中的多个变量_Bash_Variables_While Loop - Fatal编程技术网

Bash 我如何“;读取”;while循环中的多个变量

Bash 我如何“;读取”;while循环中的多个变量,bash,variables,while-loop,Bash,Variables,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 1st_list=$(…co

如何使用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
1st_list=$(…code.)
第二个列表=$(…代码..)
从_1读取第_行,从_2读取第_行
做
echo“$line\u来自\u 1,$line\u来自\u 2”>>outputfile.csv
完成<$1st\u列表,$2nd\u列表

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

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")
)

如前所述,只要第二次读取成功,循环就会成功(忽略第一次读取的退出状态)。要循环,只要两者都成功,请使用
从\u 1读取行\u和从\u 2读取-u 3行\u

要循环,只要其中一个成功,您将需要一个稍微复杂一点的小脚本作为
while
条件:

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

更新:如果已经设置了变量来代替流程替换,那么也可以简单地在此处使用字符串。(我不确定您的问题是否有点不清楚,但为了并行地读取多个源,您需要使用多个文件描述符,我认为还需要处理替换

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")
)

如前所述,只要第二次读取成功,循环就会成功(忽略第一次读取的退出状态)。要循环,只要两者都成功,请使用
从\u 1读取行\u和从\u 2读取-u 3行\u

要循环,只要其中一个成功,您将需要一个稍微复杂一点的小脚本作为
while
条件:

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

更新:如果已经设置了变量来代替流程替换,那么也可以简单地在此处使用字符串。(我不确定是否
3假设您想要作为输出

file1line1,file2line1
file2line2,file2line2
etc.
那么你根本不需要这样的东西,因为粘贴就是这样做的

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

粘贴-d,假设您想要作为输出

file1line1,file2line1
file2line2,file2line2
etc.
那么你根本不需要这样的东西,因为粘贴就是这样做的

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


paste-d,
$1st_list
$2nd_list
中的示例值是什么?@anubhava$1st_list和$2nd_list是多行脚本变量。我正在尝试使用这些变量创建csv文件。不确定这是否是最好的方法。我将更新该问题。您有两组行要梳理line具体是什么?
line1,line2
?`line1field1,line2field1,l1f2,l2f2,…。?将
>outputfile.csv
echo
移动到
>outputfile.csv
完成后的
输出文件,这样只打开一次,而不是重新打开(然后关闭)每次你想写一行。在
$1st_list
$2nd_list
中的示例值是什么?@anubhava$1st_list和$2nd_list是多行脚本变量。我正在尝试用这些变量创建一个csv文件。不确定这是否是最好的方法。我将更新这个问题。你有两行您试图如何准确组合?
line1,line2
?`line1field1,line2field1,l1f2,l2f2,…。?将
>outputfile.csv
echo
移动到
>outputfile.csv
完成后的
>,这样您只打开一次输出文件,而不是重新打开(然后关闭它)每次你想写一行。当
$first\u list
被清空时,这会失败。是的;当一个或另一个列表先被耗尽,并且OP在问题中没有提到所需的行为是什么时,有多种方法可以处理。当然,最好是替换
echo“$first\u list”
echo“$second_列表"
使用实际生成它们的代码;这样内容就不需要存储在内存中。@CharlesDuffy我会更明确地说明这一点。另外,POSIX从标准输入以外的内容读取数据的方法是使用
读取行\u from\u 2,当
$first\u list
为空时,该方法会失败。是的;有多种方法可以处理w当一个或另一个列表首先用尽,而OP在问题中没有提到所需的行为是什么时。当然,最好替换
echo“$first\u list”
echo“$second\u list”
使用实际生成它们的代码;这样内容就不需要存储在内存中。@CharlesDuffy我会更明确地说明这一点。另外,POSIX读取标准输入以外的内容的方法是使用
读取行\u from\u 2