2017-03-23 56 views
0

我有一個變量如何在bash中將變量的值傳遞給管道?

THING="echo '3'; echo '5'; echo '4'; echo '3';" 

,我想把它推到像管道:

THING2=$({ $THING } | /peep.exe) 

我該怎麼做呢?當我嘗試第一個時,它給了我一些錯誤,但是當我嘗試它時:

THING2=$({ echo '3'; echo '5'; echo '4'; echo '3'; } | ./peep.exe) 

它工作正常。

+0

問題在於你的第一個'echo'處理行'3'的其餘部分;回聲'5';回聲'4'; echo'3';「'作爲它的參數,所以不讓shell將它們解釋爲隨後的命令。 – GavinBrelstaff

+1

閱讀[Bash FAQ 050](http://mywiki.wooledge.org/BashFAQ/050)。 – chepner

回答

2

不要使用變量代碼;使用功能。

thing() { 
    echo '3' 
    echo '5' 
    echo '4' 
    echo '3' 
} 

thing2=$(thing | /peep.exe) 
+2

IMO,它是有害的,因爲它驗證了一種不必要的方法,人們看到'eval'的一種用法,不明白*爲什麼*在這種情況下是可以的,並且試圖在不安全的情況下應用它。直到你*真的需要它(對於大多數人來說這是「從不」) – chepner

+0

(前面是迴應現在刪除的評論,詢問在這種情況下使用'eval') – chepner

+0

如果我想生成很多還有很多回聲與數字?就像做一個循環,產生從0到1000的1000回聲?我怎麼能堅持到功能? 基本上,我試圖管道1000回聲命令。 –

0

如果你正打算做的是通過文本字符串「回聲‘3’......」等,以在管道中的下一個應用程序,那麼這段代碼就足夠了。

如果您打算只傳遞3,5,4,3個數字,那麼@Chepner的回覆將會執行。

希望這對你有好處。

THING="echo '3'; echo '5'; echo '4'; echo '3';" 
echo "$THING" 

THING2=$(echo "$THING" | grep "3") 
echo "$THING2" 
相關問題