AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1048605
Accepted
J. Doe
J. Doe
Asked: 2018-06-22 10:07:00 +0800 CST2018-06-22 10:07:00 +0800 CST 2018-06-22 10:07:00 +0800 CST

如何将我的变量从 Bash 脚本带入 Perl 脚本?

  • 772

我在 bash 脚本中有变量,我需要将其转移到 perl 中。我在 bash 脚本中声明了变量 $gal 和 $obsid,然后我调用了新程序。

gal=UCLA121
obsid=1896
./my_program

perl 脚本的开头加载带有短语的图像

$ph_im =  "./$gal/img/${obsid}.img";

但新程序中的变量为 NULL。

scripts bash environment-variables language perl
  • 3 3 个回答
  • 3143 Views

3 个回答

  • Voted
  1. Best Answer
    Sergiy Kolodyazhnyy
    2018-06-22T10:14:16+08:002018-06-22T10:14:16+08:00

    可以通过导出变量来使 shell 脚本中的子进程可以使用变量

    export foo=bar
    

    或者通过调用带有变量的程序

    foo=bar ./my_prog.pl
    

    无论哪种情况,您都需要ENV在 perl 脚本中调用它们

    my $barfoo = $ENV{'foo'};
    
    • 19
  2. glenn jackman
    2018-06-22T10:55:18+08:002018-06-22T10:55:18+08:00

    使用环境是一种更清洁的方式。

    有开关:_-s

    $ cat vars.pl
    #!perl
    use feature 'say';
    say "foo=$foo";
    say "bar=$bar";
    
    $ echo "$foo,$bar"
    123,456
    
    $ perl -s ./vars.pl -foo="$foo" -bar="$bar"
    foo=123
    bar=456
    
    • 10
  3. Brythan
    2018-06-22T15:32:13+08:002018-06-22T15:32:13+08:00

    如果你这样称呼它

    ./myscript.pl 1 35
    

    您可以使用@ARGV. 例如

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use Data::Dumper qw(Dumper);
    
    print "ARGV[0]=$ARGV[0]";
    print "ARGV[1]=$ARGV[1]";
    
    print Dumper \@ARGV;
    

    示例来源。

    这是一个老例子,所以它可能没有使用最新的样式。我目前没有设置 perl 编译器,所以我无法测试输出。

    您可以使用Data::Dumper来帮助您调试事物。

    如果你这样称呼它

    perl -s ./myprogram -$gal="$gal" -$obsid="$obsid" 1 35
    

    意识到你可能会得到奇怪的结果混合@ARGV和命名参数。您可能希望将调用方式更改为类似

    perl -s ./myprogram $gal $obsid 1 35
    

    或者

    perl -s ./myprogram -gal="$gal" -obsid="$obsid" -first="1" -second="35"
    

    另请注意,命名参数是-gal,而不是-$gal。我不太确定$它会在那里做什么,但它往往会做一些事情,而不是没有它会发生什么。

    请记住,Data::Dumper如果您得到令人困惑的结果,可以帮助您调试事物。

    • 4

相关问题

  • 如何设置环境变量?

  • 如何编写 shell 脚本来安装应用程序列表?

  • Mac OS X Automator 的替代品?

  • 备份 bash 脚本未压缩其 tarball

  • 在哪里可以找到有关 /etc/environment 文件格式的文档?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve