perl - perl 中的 $ENV{$variable}

标签 perl environment-variables

无论如何在 Perl 中通过 $ENV{$variable} 来扩展变量?

我在 shell 中导出了“a=T”和“T=b”,并运行了打印“$ENV{$a}\n”的 Perl 脚本,但没有打印任何内容。我想“b”可以打印,那我在Perl中应该怎么做呢?

最佳答案

你说的那些环境变量应该被链接起来,所以

$ENV{ $ENV{a} };

注意:不是$a但是 a , 喜欢 $ENV{USER}等等。这使用散列%ENV (参见 perlvar ),它具有当前环境,因此键是环境变量的名称。

%ENV 中使用 Perl 变量(用于 shell 变量的名称†)显然很有趣。 , 而不是上面的字符串文字。在这种情况下,我们需要以某种方式将 shell 变量、它的名称或值传递给 Perl 程序,以便将它存储在一个变量中;不能直接使用。

顺便说一句,将变量从 shell 传递到 Perl 的方法之一正是通过导出它,然后通过 %ENV 使其可用。 .但是,它也可以像往常一样通过命令行传递。假设使用 Perl one-liner(在 shell 脚本中很常见),我们有两种选择如何通过
  • 作为论据,perl -we'...' "$var" ,在这种情况下,它在 @ARGV 中可用
  • 通过 -s command switch , perl -s -we'...' -- -shv="$var" ,什么设置$shv单行中的变量,值为 $var . --标记论点的开始。

  • this post欲知详情,或许还有 this one另一个更复杂的例子。

    备注 注释询问如何传递变量的名称(字符串 a ),而不是它的值( $a )。这对我来说似乎不是最好的设计;如果由于某种原因需要传递变量的名称,那么将其存储在变量( var="a" )中并传递该变量是有意义的,如上所述。

    但是,如果这个想法确实是要传递名称本身,那么请改为这样做,因此
    perl -we'...' "a"
    perl -we'...' -s -- -shv="a"
    

    其余的和%ENV一样使用分配给输入的变量。

    如果使用完整的 Perl 脚本(不是单行),则使用 Getopt::Long很好地处理 arugments。

    † 一条注释询问如何将 shell 变量的名称传递给 Perl 变量 — 所以 a来自 OP,而不是它的值 $a .我有点不确定它的效用,但这当然是可能的。

    将变量从 shell 传递到 Perl 的两种方法在传递的内容上有所不同。

    关于perl - perl 中的 $ENV{$variable},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58705017/

    相关文章:

    perl - 如何使用GetOpt传递文件

    perl - 在 Perl 中如何打印到变量而不是文件?

    ruby-on-rails - rails database.yml 不接受 ERB

    Laravel 4.1 部署 - 无法识别生产 .env.php

    linux - Puppet:设置环境变量和启动应用程序 - 变量未定义

    r - 如何在 RStudio 中更改 .Rprofile 位置

    perl - 如何解析在 Perl 中解压缩的以空格分隔的 STDIN 十六进制字符串?

    multithreading - Perl 并行运行两个 while 循环子例程

    perl - 执行使用 Elasticsearch.pm 的 perl 脚本时,Module/Runtime.pm 的版本格式无效(需要版本)

    msbuild - 列出所有已定义的 MSBuild 变量 - 等效于 set