ls -l | wc -l 重定向到新文件时输出不同

0 ls ubuntu

"ls -l | wc -l" 输出 "1+no.file/directories"(第一行额外一个)。

但是,当我运行命令 ls -l | wc -l > temp(当输出被重定向到一个新的文件 temp 时)。存储在临时文件中的值比未重定向时输出的值多 1。我想这是因为创建了新的“临时”文件,但临时文件应该是在 ls -l 命令运行后创建的,因此,输出应该与没有重定向的输出相同。

有人请帮忙

Ton*_*nny 5

这是完全正常的行为。

发生的情况是 shell(sh、bash、csh、ksh 等)首先读取整个命令行。
然后按从右到左的顺序构建进程、管道和重定向文件,然后才运行实际命令。

因此,在运行 ls 命令之前创建重定向文件 (temp)。
它必须是,因为在 wc 实际启动之前,与“temp”相关联的文件句柄需要可用作 wc 输出的目标。
在将 ls 的输出附加到将成为 wc 输入的文件句柄之前,需要依次设置 ​​wc 命令。

尽管一开始看起来有点不合逻辑,但当您了解 shell 构建其命令序列的方式时,这完全有道理。