我正在尝试避免创建任何新文件来存储输出,以便最大限度地降低覆盖具有相同名称的目录中某些内容的风险。我试图用管道评估流中的每一行,而不是输出到文件,然后使用while read line do done < file
循环。类似的东西:
echo -e "1\n2\n3\n4\n5" | #evaluate current line separately#
我可以以某种方式将每一行读入数组,然后评估数组中的元素吗?或者有更好的方法可以避免意外覆盖文件吗?
答案 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)
您可以使用mktemp
或tempfile
来创建具有唯一名称的临时文件,从而避免覆盖文件。但是,我会像choroba的回答一样使用过程替换。