2012-04-01 139 views
8

无可否认,我是一名bash初学者。我总是希望为了我的shell脚本目的达到Python。不过,我试图强迫自己学习一些bash。我很好奇为什么下面的代码不起作用。内联bash脚本变量

sh -c "F=\"123\"; echo $F" 

回答

13

它不工作,因为在双引号字符串变量展开发生之前被称为命令。也就是说,如果我输入:

echo "$HOME" 

外壳转变成这样:

echo "/home/lars" 

前实际调用echo命令。同样,如果您键入:

sh -c "F=\"123\"; echo $F" 

这被转化为:

sh -c "F=\"123\"; echo" 

调用的sh命令之前。您可以使用单引号来抑制变量扩展,例如:

sh -c 'F="123"; echo $F' 

您也可以用反斜杠逃脱$

sh -c "F=\"123\"; echo \$F" 
+0

另外,如果你想学习'bash',花一些高质量的时间用'bash'手册页,还有[#bash faq](http://mywiki.wooledge.org/BashFAQ)。 – larsks 2012-04-01 01:06:12

+0

另外,请注意,在单引号中,不需要反斜杠 - 引号:''F =“123”''而不是''F = \“123 \”'''。 – larsks 2012-04-01 01:07:45

+0

谢谢!完全意义。这些小细节带来了很大的变化。 :-) – Daniel 2012-04-01 01:30:55