例如如下:
$ value=$(uname -r)
$ perl -e 'print "$value"'
当我们在这里运行 Perl 来执行我们的代码时,我们不会将 shell 变量 $value 的内容发送给 Perl。我们正在发送文字字符串“$value”,然后 Perl 将尝试打印不存在的 Perl 变量 $value。
这里有两种方法可以纠正这个问题。
第一种方法是将你的 Perl 代码用双引号而不是单引号括起来,这样当发送到 Perl 时,$value 就会成为 shell 变量 $value 的内容,而不是文字字符串 '$value':
$ value=$(uname -r)
$ perl -e "print '$value'"
3.13.9-generic
但是,当使用此方法时,如果您有 Perl 变量和这个 shell 变量,您将需要“转义”Perl 变量,否则您将收到如下错误:
$ value=$(uname -r)
$ perl -e "$example = 'test'; print \"$value $example\";"
syntax error at -e line 1, near "="
使用 \'s 将更正此问题:
$ value=$(uname -r)
$ perl -e "\$example = 'test'; print \"$value \$example\";"
3.13.9-generic test
其次,您可以通过将“值”导出到环境中来避免将单引号更改为双引号,然后通过 Perl 程序中已有的 %ENV 哈希 (http://perldoc.perl.org/Env.html) 访问它。例如:
$ export value=$(uname -r)
$ perl -e 'print "$ENV{value}\n"'
3.13.9-generic
请注意您的环境,不要意外覆盖某些需要的环境变量。使用非常适合您的工作的命名约定会有所帮助:
$ export MYPROGRAMNAME_KERNEL_VERSION=$(uname -r)
$ perl -e 'print "$ENV{MYPROGRAMNAME_KERNEL_VERSION}\n"'
3.13.9-generic
printenv 在大多数 Linux 系统上会显示当前已建立的环境变量。您也可以只使用 Perl 来检查 %ENV。