Linux Ubuntu上的基本bash命令:wc-l<;file1.txt>;file2.txt与wc-l<;file1.txt>;file1.txt
我在Ubuntu上测试基本的bash命令,当我在终端上Linux Ubuntu上的基本bash命令:wc-l<;file1.txt>;file2.txt与wc-l<;file1.txt>;file1.txt,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,我在Ubuntu上测试基本的bash命令,当我在终端上 wc -l < file1.txt > file2.txt wc-lfile2.txt wc读取文件1中的所有行,并将编号保存到file2.txt 但是,如果我使用类似的命令wc-lfile1.txt,但我尝试将其保存在相同的>file1中,则输出总是0 这种行为的原因是什么?这是因为重定向的优先级高于其他命令。 在这里,文件1将被清空,然后才能对其执行任何操作当您编写命令wc-lfile1.txt时,shell将首先读取
wc -l < file1.txt > file2.txt
wc-lfile2.txt
wc
读取文件1中的所有行,并将编号保存到file2.txt
但是,如果我使用类似的命令wc-lfile1.txt
,但我尝试将其保存在相同的>file1
中,则输出总是0
这种行为的原因是什么?这是因为重定向的优先级高于其他命令。
在这里,文件1将被清空,然后才能对其执行任何操作当您编写命令
wc-lfile1.txt
时,shell将首先读取整个命令,并将标准输入、输出从/重定向到file1.txt
然后,当使用>
打开文件进行写入时,如果文件存在,将覆盖该文件并创建一个空文件。然后,进程(您的wc
)将开始执行,并在其中写入,直到执行结束
但是,您的wc-l
必须读取文件并计算其中的行数,因为文件是空的(被覆盖),它将直接转储到其中:
0 file1.txt
要证明这一点,请使用>
$ cat file1.txt
a
b
b
$ wc -l file1.txt
3 file1.txt
$ wc -l file1.txt >> file1.txt
$ cat file1.txt
a
b
b
3 file1.txt
您的文件内容是完整的,wc
在将结果附加到文件之前正确读取了行数
注意:
一般来说,除非您确切知道自己在做什么,否则不建议在同一个文件中写入和读取。在命令运行期间,有些命令有一个<代码>内联选项来修改文件,并强烈建议使用它们,因为即使命令在执行过程中崩溃,文件也不会被破坏。 < P>尝试<代码> >代码> >代码>文件1。TXT < /COD>而不是<代码> > /代码>。代码>>将附加到文件,而不是覆盖整个文件。试试-
wc -l < file1.txt >> file1.txt
wc-l>file1.txt
重定向根本不是命令;它们是命令的一部分,但它们确实是在命令运行之前由shell处理的。