2016-05-03 77 views
2

我想將一個字符串回顯到/etc/hosts文件中。該字符串存儲在名爲$myString的變量中。

當我運行下面的代碼回聲是空的:

finalString="Hello\nWorld" 
sudo bash -c 'echo -e "$finalString"' 

我在做什麼錯?

回答

3
  1. 您不會將變量導出到環境中,以便可以通過子流程獲取該變量。

  2. 你還沒有告訴sudo保護環境。

\

finalString="Hello\nWorld" 
export finalString 
sudo -E bash -c 'echo -e "$finalString"' 

或者,你可以在當前shell替代品來代替:使用雙引號來

bash -c "echo -e '$finalString'" 

即:

finalString="Hello\nWorld" 
sudo bash -c 'echo -e "'"$finalString"'"' 
+0

即:使用'export'使變量在子shell中可用。 – fedorqui

+0

將變量導出到環境中,它只是'export finalString'?因爲它仍然沒有打印變量。 – user2771150

+0

@ user2771150你可能需要'-E'在sudo - >'sudo -E bash -c'echo -e「$ finalString」''。 – fedorqui

1

你可以這樣做向su提供參數bshel​​l,因此變量($finalString)按預期展開(由當前shell)。

雖然我會建議不要使用-e標誌與echo。相反,你可以這樣做:

finalString="Hello 
World"