2011-10-26 71 views
2

我想使用read命令來初始化一個變量,其值來自前一個命令的輸出。我認爲這是有效的:在UNIX中重定向輸入讀取命令

echo some_text | read VAR 

但是$ VAR是空的。 「read從標準輸入中讀取一行。」 manpage說。管道將echo的輸出發送到read的輸入。我錯在哪裏?

我工作的解決方案是

echo text > file ; read VAR < file 

但它使用一個文件...

+1

[bash腳本的可能重複,從stdin管道讀取值](http://stackoverflow.com/questions/2746553/bash-script-read-values-from-stdin-pipe) –

回答

7

我假設你的shell是bash。當有管道時,管道中的每個命令都在一個子shell中執行,並且父shell連接所有相應的文件描述符。所以,read命令使用stdin並設置VAR變量,然後它的子shell退出並使用變量。

您可以使用此-DOC

read VAR << END 
text 
END 

或者,在bash中,此處的字符串

read VAR <<< "text" 

或工藝替代

read VAR < <(echo text) 
1

如何VAR=$(command);

+0

我想解決用read命令解決這個問題。 –

+0

[喜歡呢?](http://stackoverflow.com/questions/2746553/bash-script-read-values-from-stdin-pipe/6779351#6779351) –