为什么这个echo结构不起作用?

时间:2011-08-19 15:13:13

标签: bash echo

当我这样做时:

$ /bin/echo 123 | /bin/echo

我没有o / p。那是为什么?

3 个答案:

答案 0 :(得分:6)

你问为什么它不起作用。事实上,它确实有效;它完全按照你的要求去做。显然这不是你所期望的。我认为您希望它打印123,但您实际上并没有这么说。

(注意:“stdin”是标准输入;“stdout”是标准输出。)

/bin/echo 123 | /bin/echo

这是发生了什么。使用参数echo执行123命令。它将“123”,后跟换行符写入其标准输出。

stdout通过管道(|)重定向到第二个echo命令的stdin。由于echo命令忽略了它的标准输入,因此静静地丢弃第一个回声的输出。由于您没有给第二个echo命令任何参数,因此它不会打印任何内容。 (实际上,没有参数的/ bin / echo通常会打印一个空行;你看到了吗?)

通常,管道(|)与过滤器一起使用,这些程序从stdin读取并写入stdout。 cat可能是最简单的过滤器;它只读取其输入并将其保持不变地写入其输出(这意味着some-command | cat可以写为some-command)。

非平凡过滤器的示例是rev,它将stdin复制到stdout,同时反转每行中的字符。

echo 123 | rev

打印

321

rev是一个过滤器; echo不是。 echo会打印到stdout,所以将它放在管道的左侧是有意义的,但它不会从stdin中读取,因此在右侧使用它是没有意义的。管。

答案 1 :(得分:5)

“echo”从命令行读取,而不是标准输入。所以管道在这里不起作用。

来自bash手册:

echo [-neE] [arg ...]

Output the args, separated by spaces, terminated with a newline.

所以你的第一个回声确实打印“123”表示输出,但是,第二个回声没有使用它,所以“123”被删除。然后打印一个空行,就好像你运行“echo”一样。

你可以使用cat作为Keith Thompson的建议:

echo 123|cat

答案 2 :(得分:0)

/bin/echo 123 < /bin/echo

pipe = concat

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-4.html

管道允许您使用程序的输出作为另一个程序的输入