2016-08-02 60 views
3

我知道shell变量是当前shell的局部变量,而环境变量(export被指定的变量)则被传递到shell分支的子进程上。Shell变量在双引号Perl单线程中可见

当我运行双引号内的Perl的一个班轮我可以从fork版perl的访问的过程(本地)shell变量:

$ FOO=bar 
$ perl -we "print qx'echo $FOO'" 
bar 

这是为什么?

+1

比较:'perl -we'打印qx/echo $ ENV {FOO} /'。 –

回答

5

这是因为双引号字符串中的shell变量插值。

$FOO变量在父壳体中评估 - 其中$FOO的值为bar - 并插入到带引号的字符串中。

因此您实际运行的Perl代码是:

print qx'echo bar' 
+0

[这里](http://stackoverflow.com/questions/6697753/difference-between-single-and-double-quotes-in-bash)是一个更详细的解释。 – jreisinger

4

这是因为你的shell翻译的$FOO它提交给Perl之前的内容。

如果你想用这个$FOO从你的Perl环境,做到这一点:

perl -we "print qx'echo \$FOO'" 

的外壳应通过它扔掉之前转换到$\$

+0

另一种方法是对内联Perl代码使用单引号:'perl -we'print qx'\''echo $ FOO'\'''''。 – jreisinger

相关问题