2011-01-14 370 views
3

當您執行如何在sh -c「...」命令中分配shell變量?

[email protected]:/$DOG=happy; echo $DOG; 

你得到的輸出

happy 

但是,當你執行 傑里米@ home的:/ $ SH -c 「DOG =幸福;回聲$ DOG」;

甚至

[email protected]:/$sh -c "DOG=happy; echo "$DOG";" 

[email protected]:/$sh -c "DOG=happy; echo \"$DOG\";" 

[email protected]:/$sh -c "DOG=happy; echo '$DOG';" 

你只有一個空行。這是怎麼回事?我怎樣才能真正從sh -c命令中設置一個變量?

回答

7

逃離美元符號(\$)。

> sh -c "DOG=happy; echo \$DOG;" 
happy 

另一種選擇是使用單引號代替雙引號 - 變量不是單引號內評估,所以$DOG將通過以sh評估通過。

> sh -c 'DOG=happy; echo $DOG' 
happy 

但是,如果您需要在兩個變量替代傳遞給sh之前,還通過傳遞某些變量,它通常是最簡單的,只是逃避你想通過的人。

+0

感謝,順便說一下,我試圖去執行它作爲find命令的一部分,就像找到。 -exec sh -c「...」;所以我想我確實想通過變量{},儘管我不確定這是通過不同的機制完成的。 – 2011-01-14 19:32:22

5

好的命令是:

sh -c 'DOG=happy; echo $DOG;' 

或者你可以逃脫「$」符號

sh -c "DOG=happy; echo \$DOG;" 
相關問題