Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Ubuntu上的基本bash命令:wc-l<;file1.txt>;file2.txt与wc-l<;file1.txt>;file1.txt_Linux_Bash_Shell_Ubuntu - Fatal编程技术网

Linux Ubuntu上的基本bash命令:wc-l<;file1.txt>;file2.txt与wc-l<;file1.txt>;file1.txt

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将首先读取

我在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将首先读取整个命令,并将标准输入、输出从/重定向到
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处理的。