2012-07-17 37 views
0

對於FOO的以下值:解讀命令替換從可變在bash

$ FOO='echo `echo hello`' 
$ $FOO 
`echo hello` 

我怎樣才能得到預期的輸出:

hello 

基本上,我怎樣可以解釋在一個命令替換變量的內容?

+6

http://mywiki.wooledge.org/XyProblem – 2012-07-17 21:49:37

+0

這不是一個XY問題。對於一個合法的問題,這是一個合理的問題,在我的具體情況下,這是完成我需要做的事情的唯一方法(請參閱我在答案中的評論)。我可以包含有關我的設置以及爲什麼我在環境變量中使用命令替換的詳細信息,但這不在提供問題答案(以及任何預警警告)的範圍內。 – umop 2012-07-18 17:48:28

回答

5

回答這個問題給出,

eval $FOO 

但你可能要去了解你真正的問題走錯了路。

+3

這是正確的,但我不能讓自己加入,因爲它包含單詞'eval'。 – jordanm 2012-07-17 22:25:30

+0

@jordanm'eval'有什麼問題? – suvayu 2012-07-18 06:52:32

+0

@suvayu這是一個安全風險,因爲您可能無法完全控制作爲參數獲取的字符串的值。它類似於SQL注入攻擊。在這個例子中,攻擊者可能會將'FOO =「rm -rf /」潛入代碼中。如果可能的話,避免使用「eval」更安全(通常是)。 – chepner 2012-07-18 12:20:23

-2

試試這個

$ FOO="echo `echo hello`" 
$ $FOO 

只需更換單引號雙引號

+0

從問題的措辭來看,我認爲單引號是故意的。 OP希望延遲命令替換直到變量被展開。 – chepner 2012-07-18 12:22:36

+0

看到我以爲他使用的命令,並沒有得到正確的輸出.... dats爲什麼我回答說「只需用雙引號替換單引號」... – Debaditya 2012-07-18 13:16:22