我期望
echo |
Run Code Online (Sandbox Code Playgroud)
执行以下操作:
stdout
.stdout
到stdin
.我期望将空字符串写入的stdin
是:什么都没有。发生了什么:>
出现一个提示,其行为类似于 bash 中的 bash:
> echo m
m
Run Code Online (Sandbox Code Playgroud)
这是为什么?
|
是互连两个命令的运算符。
cmd1 | cmd2
Run Code Online (Sandbox Code Playgroud)
开始cmd1
并cmd2
与cmd1
连接到管道写入端的 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)。
再说一遍,这没什么意义。