例如如下所示:
$ 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。