管道( | )是命令吗?

Use*_*49B 16 linux bash command-line pipe

据我了解,管道( | ) 获取一个进程的标准输出并将其作为标准输入传递到另一个进程。

但我想知道管道是否( | )被视为像 ls、grep 等命令。

下面的命令行中有多少个命令?

ls /etc | grep nginx

我很困惑是否应该数一下管道( | )

squ*_*man 40

在 Bash 中,管道(|与 一起|&)不是命令,而是控制运算符。

\n

这个参考

\n
\n

管道是由控制运算符 \xe2\x80\x98|\xe2\x80\x99 或 \xe2\x80\x98|&\xe2\x80\x99 之一分隔的一个或多个命令序列。

\n
\n

因此,在您的示例的上下文中,lsgrep是命令,您不应该包含管道。

\n

  • @squillman 一个简单的命令是[“一系列可选的变量赋值和重定向,以任何顺序,可选地后跟单词和重定向,由控制运算符终止。”](https://pubs.opengroup.org/onlinepubs/9699919799.2018 Edition/utilities/V3_chap02.html#tag_18_09_01) `LC_ALL=C grep '^[az]' < somefile`,或者上面的 `ls /etc` 和 `grep nginx` 都是简单的命令,但是像 `if` 这样的命令, `while` 结构以及 `{ ...; }` 和 `( ... )` 块是复合命令。 (6认同)
  • `ls` 是一个与 `grep` 同等的命令行工具。它不是内置的 shell。这两个程序都位于“/bin”或“/usr/bin”中。关于使用“type”、“which”、“command -v”、“whence”以及六个其他命令,有相当多的讨论,但其中一些命令会告诉您命令何时是 shell 内置命令,当它们是别名时,以及当它们是“/bin”中的程序时。“type”命令可能是这里最好的选择。将“type ls”与“type [[”进行比较。 (5认同)