Shell变量在双引号Perl一行脚本中可见。

3
我了解shell变量是局部的,只在当前shell中有效,而环境变量(通过“export”导出的变量)则会被传递给由shell派生的子进程。当我在双引号内运行Perl一行代码时,我可以从“fork”出来的Perl进程中访问(局部的)shell变量:
$ FOO=bar
$ perl -we "print qx'echo $FOO'"
bar

为什么会这样呢?

1
与之相比:perl -we 'print qx/ echo $ENV{FOO} /'。 - Sinan Ünür
2个回答

5

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

$FOO变量在父shell中被求值 - 在该shell中,$FOO的值为bar - 并被插入到引号字符串中。

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

print qx'echo bar'

这里有一个更详细的解释:https://dev59.com/Smw15IYBdhLWcg3wT5_2 - jreisinger

4

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

如果你想在Perl环境中使用$FOO,请这样做:

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

在传递之前,Shell 应该将 \$ 翻译为 $


另一种方法是在内联Perl代码中使用单引号:perl -we 'print qx'\''echo $FOO'\''' - jreisinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接