Как назначить переменные оболочки внутри команды sh -c "..."? - PullRequest
3 голосов
/ 14 января 2011

При выполнении

jeremy@home:/$DOG=happy; echo $DOG;

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

happy

Однако, когда вы выполняете jeremy @ home: / $ sh -c "DOG = happy; echo $ DOG;"

или даже

jeremy@home:/$sh -c "DOG=happy; echo "$DOG";"

или

jeremy@home:/$sh -c "DOG=happy; echo \"$DOG\";"

или

jeremy@home:/$sh -c "DOG=happy; echo '$DOG';"

вы получите только пустую строку. Как это так? Как я могу установить переменную внутри команды sh -c?

Ответы [ 2 ]

7 голосов
/ 14 января 2011

Escape знака доллара (\$).

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

Другой вариант - использовать одинарные кавычки вместо двойных - переменные не оцениваются внутри одинарных кавычек, поэтому $DOG будет передано в sh для оценки.

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

Однако, если вам нужно как подставить переменные перед переходом на sh, так и пропустить определенные переменные, обычно проще всего избежать тех, через которые вы хотите пройти.

5 голосов
/ 14 января 2011

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

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

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

sh -c "DOG=happy; echo \$DOG;"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...