【发布时间】:2013-09-12 04:11:07
【问题描述】:
我正在尝试让 for 循环将文本输出到文件 10 次。这是我所拥有的:
for ((i=1;i<=10;i++)); do
echo "Hello World" >testforloop.txt
done
这会将Hello World 输出一次到文件testforloop.txt。如果我不输出到文件,它会在屏幕上打印Hello World 10 次。
【问题讨论】:
我正在尝试让 for 循环将文本输出到文件 10 次。这是我所拥有的:
for ((i=1;i<=10;i++)); do
echo "Hello World" >testforloop.txt
done
这会将Hello World 输出一次到文件testforloop.txt。如果我不输出到文件,它会在屏幕上打印Hello World 10 次。
【问题讨论】:
您正在使用> 重定向,它会清除文件的现有内容并将其替换为循环内的命令输出。所以这会清除之前的内容 10 次,每次替换为一行。
没有> 或>/dev/tty,它会显示在您的显示器上,> 无法擦除任何内容,因此您会看到所有十个副本。
您可以使用>>,它仍然会打开文件十次,但每次都会追加(不会清除之前的内容)。不过,这并不是非常有效,并且它保留了以前运行的数据(可能是也可能不是您想要的)。
或者,您可以将整个循环重定向一次:
for ... do cmd; done >file
它运行整个循环并重定向输出,只创建一次(或使用>>,打开追加)。
【讨论】:
... done >file 效率更高(有时非常高效),因为您只需打开、缓冲、写入和关闭文件一次。
你只是用“>”重定向回声,所以它会覆盖。您需要的是使用“>>”运算符附加。执行以下操作:
for ((i=1;i<=10;i++)) ; do echo "Hello World" >> testforloop.txt ; done
【讨论】:
以下将解决您的问题:
您应该尝试使用>> 运算符,原因已在命令echo -e 中提到
使用选项‘\n’ - 使用退格解释器‘-e’处理的新行 使用它的新行。
这样做:
for ((i=1;i<=10;i++)) ; do echo -e "Hello World" >> testforloop.txt ; done
cat 命令:
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
【讨论】:
你重写了 testforloop.txt 十次。如果你这样做了
for ((i=1;i testforloop(i).txt ;完成
其中 i 是来自 for 循环的 int。我不确定您使用的编程语言。
【讨论】:
bash 编程。这个答案也很难理解,因为(除了语法问题)它似乎只是重复了这个问题。