[英]Why this echo construct does not work?
當我這樣做:
$ /bin/echo 123 | /bin/echo
我沒有o / p。 這是為什么?
你問為什么它不起作用。 事實上,它確實有效; 它完全按照你的要求去做。 顯然這不是你所期望的。 我想你打算打印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中讀取,因此在管道的右側使用它是沒有意義的。
“echo”從命令行讀取,而不是標准輸入。 所以管道在這里不起作用。
從bash手冊:
echo [-neE] [arg ...]
Output the args, separated by spaces, terminated with a newline.
因此,你的第一個回聲確實打印“123”表示輸出,但是,第二個回聲沒有使用它,所以“123”被刪除。 然后打印一個空行,就像運行“echo”一樣。
您可以使用Cat作為Keith Thompson建議:
echo 123|cat
/bin/echo 123 < /bin/echo
管道=連接
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-4.html
管道允許您使用程序的輸出作為另一個程序的輸入
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.