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

jre*_*ger 3 shell perl

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

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

$ FOO=bar
$ perl -we "print qx'echo $FOO'"
bar
Run Code Online (Sandbox Code Playgroud)

这是为什么?

e.d*_*dan 5

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

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

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

print qx'echo bar'
Run Code Online (Sandbox Code Playgroud)