首页 > 解决方案 > bash 中的简单命令是否在子 shell 中运行,因为单个命令可以构成管道?

问题描述

Bash 参考手册状态:

管道是一个或多个命令的序列

因此,任何命令都不会因此被限定为管道吗?这似乎不是一个纯粹的语义问题,因为手册还指出:

管道中的每个命令都在其自己的子 shell 中执行

所以这意味着一些简单的东西echo foo,事实上,在一个子shell中运行?

标签: bash

解决方案


该手册不是正式的规范。bash 遵循的正式规范(实现一个大的超集)是POSIX shell command language该规范在第 2.12 节中更清楚地说明了规则,并添加了格式以强调:

此外,多命令管道的每个命令都在子 shell 环境中 [...]

因此,一个简单的单命令流水线(1)实际上就是一个流水线;但是(2)不调用子shell。


推荐阅读