11

我正在尝试让 for 循环将文本输出到文件 10 次。这是我所拥有的:

for ((i=1;i<=10;i++)); do
    echo "Hello World" >testforloop.txt
done

这将输出Hello World一次到文件testforloop.txt。如果我不输出到文件,它Hello World会在屏幕上打印 10 次。

4

4 回答 4

16

您正在使用>重定向,它会清除文件的现有内容并将其替换为循环内的命令输出。所以这会清除之前的内容 10 次,每次替换为一行。

如果没有>>/dev/tty,它会进入您的显示器,在那里>无法擦除任何内容,因此您可以看到所有十个副本。

您可以使用>>,它仍然会打开文件十次,但每次都会追加(不会清除以前的内容)。不过,这并不是非常有效,并且它保留了以前运行的数据(可能是也可能不是您想要的)。

或者,您可以重定向整个循环一次:

for ... do cmd; done >file

它运行整个循环,输出重定向,>>只创建一次(或者,打开追加)。

于 2013-09-12T04:15:54.557 回答
6

你只是用“>”重定向回声,所以它会覆盖。您需要的是使用“>>”运算符附加。请执行下列操作:

       for ((i=1;i<=10;i++)) ; do echo "Hello World" >> testforloop.txt ;  done
于 2013-09-12T04:14:21.037 回答
0

以下将解决您的问题:

>>由于命令中已经提到的原因,您应该尝试操作员echo -e

使用选项 '\n' - 带有退格解释器的新行 '-e' 处理使用它的新行。

关联

这样做:

for ((i=1;i<=10;i++)) ; do echo -e "Hello World" >> testforloop.txt ; done

猫命令:

cat testforloop.txt

输出:

Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World Hello World

或者,您可以尝试:

cat -n testforloop.txt

输出:

1 Hello World 2 Hello World 3 Hello World 4 Hello World 5 Hello World 6 Hello World 7 Hello World 8 Hello World 9 Hello World 10 Hello World

于 2020-01-17T04:07:50.817 回答
-1

你重写 testforloop.txt 十次。如果你做了

对于 ((i=1;i<=10;i++)) ; 做 echo "Hello World" > testforloop(i).txt ; 完毕

其中 i 是来自 for 循环的 int。我不确定您使用的编程语言。

于 2013-09-12T04:16:05.130 回答