2013-03-08 57 views

回答

4

因爲在致電sudo之前bash將替換${FOO}。那麼,什麼sh -c實際上看到的是:

FOO=bar echo Result: 

此外,即使你試圖

FOO=bar echo Result:${FOO} 

它仍然無法工作。要獲得這種權利,你可以這樣做:

FOO=bar; echo Result:${FOO} 

現在是固定的,讓我們回到sh -c。爲了防止從bash的解釋,這樣賦予sh -c字符串,只需把它放在',而不是"

sudo sh -c 'FOO=bar; echo Result:${FOO}' 

參閱理性的評論。

+0

是啊,我真的很好奇,爲什麼你需要的分號,它的工作包裹echo ... !這似乎很奇怪。 – 2013-03-08 17:46:03

+0

我知道對不對?我之前使用過'PATH = $ PATH sudo ...',因爲'sudo'出於安全原因重置了'PATH',這沒什麼問題。我不知道爲什麼在這個例子中它不起作用。 – Shahbaz 2013-03-08 17:47:16

+2

'FOO = bar echo ...'在'echo'運行的環境中設置'FOO'的值;但'echo'在實際運行之前需要擴展'$ {FOO}'。 – chepner 2013-03-08 18:53:31

1

這不起作用,因爲變量FOO設置爲以下命令,echo,但${FOO}被封閉外殼替換。

如果你想要的工作,你必須設置變量FOO用於封閉外殼和單引號

sudo FOO=bar sh -c 'echo Result:${FOO}' 
相關問題