如何在sh -c"..."命令中分配shell变量?

Jer*_*wen 3 variables bash shell

当你执行

jeremy@home:/$DOG=happy; echo $DOG;
Run Code Online (Sandbox Code Playgroud)

你得到了输出

happy
Run Code Online (Sandbox Code Playgroud)

但是,当你执行jeremy @ home时:/ $ sh -c"DOG = happy; echo $ DOG;"

甚至

jeremy@home:/$sh -c "DOG=happy; echo "$DOG";"
Run Code Online (Sandbox Code Playgroud)

要么

jeremy@home:/$sh -c "DOG=happy; echo \"$DOG\";"
Run Code Online (Sandbox Code Playgroud)

要么

jeremy@home:/$sh -c "DOG=happy; echo '$DOG';"
Run Code Online (Sandbox Code Playgroud)

你只得到一个空白行.这是怎么回事?如何从sh -c命令中实际设置变量?

Amb*_*ber 7

逃离美元符号(\$).

> sh -c "DOG=happy; echo \$DOG;"
happy
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用单引号而不是双引号 - 变量不在单引号内进行求值,因此$DOG将传递给它sh进行评估.

> sh -c 'DOG=happy; echo $DOG'
happy
Run Code Online (Sandbox Code Playgroud)

但是,如果你需要在传递之前替换​​变量sh,并且还要传递某些变量,那么通常最容易逃避你想要传递的变量.


Ben*_*ery 5

好的命令是:

sh -c 'DOG=happy; echo $DOG;'
Run Code Online (Sandbox Code Playgroud)

或者你可以逃脱'$'标志

sh -c "DOG=happy; echo \$DOG;"
Run Code Online (Sandbox Code Playgroud)