为什么 "echo "qwerty" | /bin/sh" return "/bin/sh: 1: qwerty: not found"?

why does "echo "qwerty" | /bin/sh" return "/bin/sh: 1: qwerty: not found"?

我知道 echo 命令显示作为参数传递的文本行。

所以语法 echo "qwerty" 会显示:

qwerty

但是当我将前面的语法与 | /bin/sh 合并时,会显示以下消息:

/bin/sh: 1: qwerty: not found

我想知道为什么使用按位或运算符(即 | )以这种方式结束这样的输出。

| 不是按位或运算符。[1] 它是管道运算符。它导致前面程序的标准输出通过管道传输到后面程序的标准输入。

$ printf 'abc def\nghi\n' | wc
      2       3       12

这表明 wc(“字数统计”)读取 printf 的输出并打印出它收到 2 行、3 个字和 12 个字节的事实。

在你的例子中,sh 读取命令的标准输入(由于缺少 -c 选项和文件名参数),因此将 qwerty 视为要执行的命令。


  1. 当使用 bash 和“sh 系列”中可能的其他 shell 时,它可以在算术上下文中按位或。即使您使用 bash.
  2. ,这里也不是这种情况