假设我们有一个仅包含单词“demo”的文本文件 demo.txt 和一个仅包含单词“sample”的文本文件sample.txt。
据我所知,这cat demo.txt >> sample.txt
会将 demo.txt 的内容附加到sample.txt 的内容中。
但是当我在重定向符号的两侧都有 cat 命令时会发生什么?我已经尝试过使用单重定向和双重定向进行相同的操作。我已经研究了足够多的内容,知道如果您不希望某些内容被覆盖,您确实希望使用双重定向而不是单重定向。我还知道 cat 命令是连接的缩写(令我惊讶的是“cat”命令可以兼作 txt 打印“函数”)。
cat demo.txt >> cat sample.txt
我不明白它是如何工作的,我认为应该产生结果是什么?
答案1
首先处理重定向,并将其与命令及其参数分开处理。重定向在单个命令中的位置是任意的。
您显示的命令,
cat demo.txt >> cat sample.txt
相当于
cat demo.txt sample.txt >> cat
或者,如果你愿意的话,
>> cat cat demo.txt sample.txt
该命令作为一个整体,将两个文件的串联附加demo.txt
到sample.txt
一个名为cat
.
shell 将首先打开cat
(您重定向到的文件)进行追加,如果尚不存在则创建它,然后将其用作命令的标准输出流cat demo.txt sample.txt
。
有关的:
我倾向于紧密地编写重定向,重定向运算符和(在本例中)文件之间没有空格。我也倾向于在最后写重定向。
cat demo.txt sample.txt >>cat
有些人喜欢在命令开头编写输入重定向,例如
<file.in cat >file.out
但我个人并不使用它,因为它对我来说看起来很奇怪。