如何逐行评估流

时间:2012-08-03 08:57:14

标签: bash shell unix

我正在尝试避免创建任何新文件来存储输出,以便最大限度地降低覆盖具有相同名称的目录中某些内容的风险。我试图用管道评估流中的每一行,而不是输出到文件,然后使用while read line do done < file循环。类似的东西:

echo -e "1\n2\n3\n4\n5" | #evaluate current line separately#

我可以以某种方式将每一行读入数组,然后评估数组中的元素吗?或者有更好的方法可以避免意外覆盖文件吗?

3 个答案:

答案 0 :(得分:8)

bash中,常见的方法是使用过程替换:

while read line ; do
    ...
done < <( commands producing the input)

答案 1 :(得分:3)

你在那里...

echo -e "1\n2\n3\n4\n5" | while read line; do
    ...
done

请注意,bash在单独的进程中运行管道的每个部分,并且在该块之后定义的任何变量都不会保留。 (ksh93将保留它们,因为循环将在当前shell进程中运行。)

答案 2 :(得分:1)

您可以使用mktemptempfile来创建具有唯一名称的临时文件,从而避免覆盖文件。但是,我会像choroba的回答一样使用过程替换。