“>”和“ >>”有什么区别?


12

ls >和之间有什么区别ls >>?对于我的GCSE计算,我需要了解这一点,但不知道有什么区别。


1
除了下面的漂亮答案外,请参见stackoverflow.com/a/984761/1841533上的第二个(也是最受好评的)答案:使用>>写入文件(例如:日志)也具有很好的副作用如果在进程仍然写入文件的情况下截断了文件,则saif文件的开头不会出现“ Nul”字符!(例如:在日志文件轮换期间)。因为“ foo> file”不会查找,所以它不会注意到大小的变化,并且指向的起点仍然比起点更远,因此OS会填充Nul。foo >> file会查找并因此指向新位置(开始)。
Olivier Dulac 2014年

由于这是一个有教育意义的问题,我建议您学习使用相关文档:Bash参考手册的“重定向”部分(也可以通过访问man bash)。
David Foerster,2015年

Answers:


28

>>>是重定向运算符;他们将某种东西的输出,在这种情况下ls,转移到其他地方。如果此输出转到文件,>则将截断该文件-即删除任何先前的内容,而>>将新数据追加到文件的末尾,并保留先前的内容。这将适用于任何输入,因此echocat,例如,也可以这种方式使用。

另一个有趣的是|运算符,该运算符将数据传递到另一个应用程序-因此ls | cat -n将为您提供行号列表!

管道是相关术语。


2
截断还是覆盖?
DK Bose 2014年

2
从@DKBose strace输出bash -c 'echo a > blah'open("blah, O_WRONLY|O_CREAT|O_TRUNC, 0666),所以截断将是正确的术语。
muru

“管道”以及“输出重定向”,您可以在答案中使用它们。做得好。
0xSheepdog 2014年

找到了我的意思:除了这个不错的答案之外,请参阅stackoverflow.com/a/984761/1841533上的第二个(也是最受好评的)答案:>>用于写入文件(例如:日志)也有不错的一面如果saif文件的开头在进程仍写入过程中被截断,则不会出现“ Nul”字符的效果!(例如:在日志文件轮换期间)。因为“ foo> file”不会查找,所以它不会注意到大小的变化,并且指向的起点仍然比起点更远,因此OS会填充Nul。foo >>file寻找并因此指向新位置(起点)。
Olivier Dulac 2014年

5

符号>>>用于将输出重定向到文件。

如果文件不存在,两者都将创建文件。如果文件已经存在,>则将覆盖该文件,>>并将数据追加到该文件。

因此,ls > myfile将创建一个名为myfile不存在的文档。如果myfile已经存在并包含一些数据,则它将被您传递给它的新数据覆盖。

ls >> myfile如果不存在,将创建一个文件并向其中写入数据。如果文件中存在一些数据,则新数据将添加到其末尾。


0

如果使用单个>,则它将覆盖文件(如果已存在)。使用此工具时要非常小心。

如果使用两个>>,它将仅附加(即,从文件底部开始写入)(如果已存在)。否则,它将创建一个新文件(如果不存在)。


1
为什么要重复已经给出的答案?
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.