【问题标题】:Shell variable visible in double quoted Perl one-linerShell 变量在双引号 Perl 单行中可见
【发布时间】:2016-12-07 08:34:02
【问题描述】:

我知道 shell 变量是当前 shell 的本地变量,而环境变量(exported 变量)被传递给由 shell 派生的子进程。

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

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

这是为什么呢?

【问题讨论】:

  • 比较:`perl -we 'print qx/ echo $ENV{FOO} /'。

标签: perl shell


【解决方案1】:

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

$FOO 变量在父 shell 中求值 - 其中$FOO 的值为 bar - 并插入到引用的字符串中。

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

print qx'echo bar'

【讨论】:

  • Here 是更详细的解释。
【解决方案2】:

这是因为您的 shell 在将 $FOO 的内容提交给 Perl 之前对其进行了翻译。

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

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

shell 应该在传递 \$ 之前将其转换为 $

【讨论】:

  • 另一种方法是对内联 Perl 代码使用单引号:perl -we 'print qx'\''echo $FOO'\'''
猜你喜欢
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多