Shell变量在双引号Perl单行中可见

时间:2016-08-02 06:01:15

标签: perl shell

我理解shell变量是当前shell的本地变量,而环境变量(export ed变量)传递给shell分叉的子进程。

当我在双引号中运行Perl单行时,我可以从fork ed perl进程访问(本地)shell变量:

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

为什么?

2 个答案:

答案 0 :(得分:5)

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

$FOO变量在父shell中进行评估 - 其中$FOO具有值bar - 并插入到带引号的字符串中。

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

print qx'echo bar'

答案 1 :(得分:4)

这是因为您的shell在提交给Perl之前会翻译$FOO的内容。

如果要在Perl环境中使用此$FOO,请执行以下操作:

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

shell应将\$翻译为$,然后再将其传递出去。