基本的 bash 行为

Max*_*ann 0 bash

我期望

echo |
Run Code Online (Sandbox Code Playgroud)

执行以下操作:

  1. 将空字符串打印到stdout.
  2. 管道stdoutstdin.

我期望将空字符串写入的stdin是:什么都没有。发生了什么:>出现一个提示,其行为类似于 bash 中的 bash:

> echo m
m
Run Code Online (Sandbox Code Playgroud)

这是为什么?

Sté*_*las 6

| 是互连两个命令的运算符。

cmd1 | cmd2
Run Code Online (Sandbox Code Playgroud)

开始cmd1cmd2cmd1连接到管道写入端的 stdout 和连接到cmd2同一管道的读取端的 stdin并行。

在:

cmd1 |
Run Code Online (Sandbox Code Playgroud)

您缺少右手命令。

外壳程序通过发出辅助提示(PS2默认情况下为>)来询问您其余的命令,从而告诉您。

如果你想要的标准输出的echo是一个管道的书写端,而其标准输入是同一管道的读出端(但要注意,echo不能从标准输入读取),你需要使用像贝壳yash那有一个运算符(管道重定向运算符>>|):

echo test 1>>|0
Run Code Online (Sandbox Code Playgroud)

这告诉yash创建一个管道并将写入端分配给 fd 1 (stdout),将读取端分配给 fd 0 (stdin)。

再说一遍,这没什么意义。