为什么一些 bash 管道命令不起作用

why some bash commands with pipe doesn't work

我正在尝试根据 bash 行为实现我自己的 shell,我注意到有些命令不适用于管道, 就像我有:export AAA=test | cat,例如这个命令不会将 AAA 添加到环境变量,所以它就像导出不起作用,

但是如果我写:export | cat,它会打印环境变量,所以在这里,就像导出工作一样, 与 exit, unset .... 那么有人可以向我解释这种行为以及我如何实现它吗?

export 在这两种情况下都在 subshell 中执行,其环境是父 shell 的副本。

使用 export | cat,您可以捕获子 shell 环境的内容,该内容未根据从父级收到的副本进行修改,因此您获得的输出与 export一个人就有输出。

使用 export AAA=test | cat,您修改子 shell 的环境,而不是调用 shell。此外,在这种情况下,export 不会写入任何供 cat 读取的输出。管道完成后,subshell 将被销毁,控制权将恢复到当前 shell,其环境未被修改。