为什么 echo 不退出

Why echo not exit

echo aaa > >(echo $(cat))

在我看来,它应该打印 "aaa" 并退出,但除非我按下回车键,否则它会停止,为什么?

感谢

$(cat) 等同于

`cat`

命令。它运行 cat 并扩展到它的输出。

但没有任何参数 cat(实际上是 /bin/cat,参见 cat(1))正在读取 stdin 并将其复制到 stdout 直到文件结尾。

所以您的 shell 是 运行,所以正在等待您的输入。

shell是expanding的具体顺序。

它不会在完成之前等待您按回车键。该命令立即完成,但在下一个 shell 提示符后打印其输出。它看起来像:

barmar@dev:~$ echo aaa > >(echo $(cat))
barmar@dev:~$ aaa

这是因为shell不等待进程替换中的命令完成,它只是等待echo命令完成。因此,它会在 echo 完成后立即打印下一个提示,然后 echo $(cat) 异步运行并打印其输出。

如果您此时键入另一个命令,它将起作用。它看起来很奇怪,因为输出是在提示后打印的。如果你想在自己的行上有一个新的提示,你只需要按 Enter