Bash 如何逐行评估河流

Bash 如何逐行评估河流,bash,shell,unix,Bash,Shell,Unix,我试图避免创建任何新文件来存储输出,以最大限度地降低覆盖同名目录中的内容的风险。我试图用管道计算流中的每一行,而不是输出到文件,然后在readline do done

我试图避免创建任何新文件来存储输出,以最大限度地降低覆盖同名目录中的内容的风险。我试图用管道计算流中的每一行,而不是输出到文件,然后在readline do done循环中使用
。比如:

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

我是否可以将每一行读入一个数组,然后计算数组中的元素?还是有更好的方法避免意外覆盖文件?

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

while read line ; do
    ...
done < <( commands producing the input)
读行时
;做
...

完成<你已经完成了一半

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

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

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

过程替换避免了这个问题。另外,Bash4.2有
shopt-slastpipe
。有没有一种可移植的方法可以做到这一点?
<这有什么问题?命令|在读取行时生成|输入|;做done@MarkEdgar:尝试更改或设置循环体中的变量。