簡體   English   中英

為什么這個echo結構不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM