2011-08-19 24 views

回答

6

你问为什么这是行不通的。事实上,它确实有效;它的确如你所说的那样做。显然这不符合你的预期。我认为你期望它打印123,但你实际上没有这么说。

(注: “标准输入” 是标准的输入; “标准输出” 是标准输出。)

/bin/echo 123 | /bin/echo

这里发生了什么。执行echo命令的参数为123。它在标准输出中写入“123”,后跟一个换行符。

标准输出通过管道(|)重定向到第二个echo命令的标准输入。由于echo命令忽略它的标准输入,所以第一个回声的输出被安静地丢弃。既然你没有给第二个echo命令任何参数,它不会打印任何东西。 (实际上,/斌/回声不带参数的一般打印一个空行,你看到了吗?)

通常管道(|)与过滤器,从标准输入读取和写入到stdout程序使用。 cat可能是最简单的过滤器;它只是读取它的输入并将其写入其输出中(这意味着some-command | cat可写为some-command)。

一个非平凡的过滤器的例子是rev,它将stdin复制到标准输出,同时反转每行中的字符。

echo 123 | rev 

打印

321 

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

+0

谢谢。答案是“回声忽略标准输入”! – abc

0
/bin/echo 123 < /bin/echo 

管道= concate

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

管道让你使用一个程序的输出作为输入另一个

+0

“pipe = concate”?即使没有错字,这似乎是一种令人困惑的解释 – sehe

+0

谢谢。但我认为,用我所拥有的,第一个回声会将它的o/p重定向到管道,第二个会从管道获得它的i/p。这是不对的? – abc

+0

是的,我没有得到pipe = concate部分。那是什么意思? – abc

5

“回声” 从读命令行,而不是标准输入。所以管道不在这里工作。

从bash的手册:

echo [-neE] [arg ...] 

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

所以,你的第一个回波没有打印“123”站输出,然而,第二回声没有利用它使“123”被丢弃。然后打印一个空行,就像运行“echo”一样。

您可以使用cat基思·汤普森建议:

echo 123|cat 
+1

对。试试'/ bin/echo 123 | /斌/ cat'。 (当然一个简单的'echo 123'也是一样的。) –

+0

。猫是他所需要的。 –

+0

谢谢,但我的问题不是如何将字符打印到屏幕上。这就是为什么我尝试的echo构造不起作用。这是个很大的差异。 – abc