我了解shell变量是局部的,只在当前shell中有效,而环境变量(通过“export”导出的变量)则会被传递给由shell派生的子进程。当我在双引号内运行Perl一行代码时,我可以从“fork”出来的Perl进程中访问(局部的)shell变量:
为什么会这样呢?
$ FOO=bar
$ perl -we "print qx'echo $FOO'"
bar
为什么会这样呢?
这是因为双引号字符串中的shell变量插值。
$FOO
变量在父shell中被求值 - 在该shell中,$FOO
的值为bar
- 并被插入到引号字符串中。
因此,您实际运行的perl代码是:
print qx'echo bar'
这是因为你的shell在提交给Perl之前会翻译$FOO
的内容。
如果你想在Perl环境中使用$FOO
,请这样做:
perl -we "print qx'echo \$FOO'"
在传递之前,Shell 应该将 \$
翻译为 $
。
perl -we 'print qx'\''echo $FOO'\'''
。 - jreisinger
perl -we 'print qx/ echo $ENV{FOO} /'。
- Sinan Ünür