为什么 "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
视为要执行的命令。
- 当使用
bash
和“sh 系列”中可能的其他 shell 时,它可以在算术上下文中按位或。即使您使用 bash
. ,这里也不是这种情况
我知道 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
视为要执行的命令。
- 当使用
bash
和“sh 系列”中可能的其他 shell 时,它可以在算术上下文中按位或。即使您使用bash
. ,这里也不是这种情况