我理解shell变量是当前shell的本地变量,而环境变量(export
ed变量)传递给shell分叉的子进程。
当我在双引号中运行Perl单行时,我可以从fork
ed perl进程访问(本地)shell变量:
$ FOO=bar
$ perl -we "print qx'echo $FOO'"
bar
为什么?
答案 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应将\$
翻译为$
,然后再将其传递出去。