输入重定向的额外输出

use*_*828 6 pipe io-redirection input

我有一个包含三个文件的文件夹:

$ ls
a  b  c
Run Code Online (Sandbox Code Playgroud)

如果我将lsto的输出通过管道传输wc,我会得到正确的结果:

$ ls | wc -l
3
Run Code Online (Sandbox Code Playgroud)

但是,当我将 to 的输入指定wc为 的输出时ls,我会得到额外的文本:

$ wc -l <(ls)
3 /dev/fd/63
Run Code Online (Sandbox Code Playgroud)

谁能向我解释发生了什么?

Eri*_*ouf 14

wc如果可以的话,会告诉你它正在处理什么文件。使用管道的第一个是从标准输入读取,而不是文件,因此不报告文件名。但是,第二个是使用进程替换,它将命令的输出显示为一个文件,并wc报告。它报告从中读取的文件描述符。