bash - bash 中的简单命令是否在子 shell 中运行,因为单个命令可以构成管道?
问题描述
Bash 参考手册状态:
管道是一个或多个命令的序列
因此,任何命令都不会因此被限定为管道吗?这似乎不是一个纯粹的语义问题,因为手册还指出:
管道中的每个命令都在其自己的子 shell 中执行
所以这意味着一些简单的东西echo foo
,事实上,在一个子shell中运行?
解决方案
该手册不是正式的规范。bash 遵循的正式规范(实现一个大的超集)是POSIX shell command language。该规范在第 2.12 节中更清楚地说明了规则,并添加了格式以强调:
此外,多命令管道的每个命令都在子 shell 环境中 [...]
因此,一个简单的单命令流水线(1)实际上就是一个流水线;但是(2)不调用子shell。
推荐阅读
- sqlite - Sqlite 层次结构动态
- android - 底部像素溢出的 RenderFlex
- typescript - 如何将打字稿接口声明为类属性
- android - 关机时崩溃(可能是finishActivityAffinity)
- jenkins - Jenkins-X 和 Jenkins Helm 图表是否相同?
- sql - SQL Server:存储过程中的查询优化
- angular - 通过角度解析字符串编码
- mysql - mysql中是否有按特定行排序的功能?
- php - 我的 Nginx 安全链接不起作用,显示安全 URL 但视频不播放
- export-to-excel - 无法导出包含图表的页面