我知道shell变量是当前shell的局部变量,而环境变量(export
被指定的变量)则被传递到shell分支的子进程上。Shell变量在双引号Perl单线程中可见
当我运行双引号内的Perl的一个班轮我可以从fork
版perl的访问的过程(本地)shell变量:
$ FOO=bar
$ perl -we "print qx'echo $FOO'"
bar
这是为什么?
我知道shell变量是当前shell的局部变量,而环境变量(export
被指定的变量)则被传递到shell分支的子进程上。Shell变量在双引号Perl单线程中可见
当我运行双引号内的Perl的一个班轮我可以从fork
版perl的访问的过程(本地)shell变量:
$ FOO=bar
$ perl -we "print qx'echo $FOO'"
bar
这是为什么?
这是因为双引号字符串中的shell变量插值。
$FOO
变量在父壳体中评估 - 其中$FOO
的值为bar
- 并插入到带引号的字符串中。
因此您实际运行的Perl代码是:
print qx'echo bar'
[这里](http://stackoverflow.com/questions/6697753/difference-between-single-and-double-quotes-in-bash)是一个更详细的解释。 – jreisinger
这是因为你的shell翻译的$FOO
它提交给Perl之前的内容。
如果你想用这个$FOO
从你的Perl环境,做到这一点:
perl -we "print qx'echo \$FOO'"
的外壳应通过它扔掉之前转换到$
\$
。
另一种方法是对内联Perl代码使用单引号:'perl -we'print qx'\''echo $ FOO'\'''''。 – jreisinger
比较:'perl -we'打印qx/echo $ ENV {FOO} /'。 –