2011-01-14 2 views
3

При выполненииКак назначить переменные оболочки внутри команды sh -c "..."?

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

вы получите выход

happy 

Однако при выполнении Jeremy @ дома:/$ ш -с "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

Спасибо, кстати, я пытался выполнить его как часть команды поиска , как найти. -exec sh -c "..." ;, Поэтому я думаю, что мне нужно было пройти через переменную {}, хотя я не уверен, что это делается другим механизмом. –

+1

'{}' - это только переменная 'find'. – Amber

5

Хорошая команда:

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

или вы можете просто избежать «$» знак

sh -c "DOG=happy; echo \$DOG;" 
Смежные вопросы