管道是由简单的命令组成的吗?

管道是由简单的命令组成的吗?

来自 Bash 参考手册

管道是一系列简单命令由控制运算符之一|或分隔|&

来自 POSIX 2013

管道是一个或多个的序列命令由控制操作员分开|

我知道 Bash 有许多 POSIX shell 的扩展,例如|&.

但是是管道的组件命令

  • 简单的命令或
  • 只是任何命令(简单、再次管道、列表、复合和函数)?

在 Bash 中,可以执行以下操作

$ for f in $(ls *); do echo $f; done | cat

但管道的第一个组件命令并不简单,而是复合的。

答案1

Bash 4.4.5 的手册在描述管道的组成部分时不包含“简单”一词。您所指的“简单命令”可能是拼写错误或疏忽,或者可能是很久以前的遗留问题。

它是bash2014年4月由维护者修​​复,当前内容为:

管道是由一个控制运算符|或分隔的一个或多个命令的序列|&

管道显然可以由简单命令或非简单命令组成(例如子 shell 和for循环,它们是复合命令)。

答案2

Bash 手册 ( man bash) 从未在管道的描述中包含简单一词。获取任意bash-${version}.tar.gz文件来自这个网站,解压后查看该文件,bash-${version}/doc/bash.1该文件是bash各版本的使用手册。

包含这个词的simple就是bashref文件。从与上面相同的下载和扩展文件中,读取,其中包含了上述 bashref 手册的 4.3 版之前的bash-${version}/doc/bashref.pdf单词simpleat point 。3.2.2 Pipelines

3.2.2 管道 管道是由“|”或“|&”分隔的一系列简单命令。

bashref 包含这样的词并不意味着复杂的命令(与“简单”相对)以任何方式被排除在管道(包括管道{…} if…then… while…do…和其他管道)中。

这种措辞是一个简单的拼写错误,不应该用来得出任何结论。

相关内容