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

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

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

gal=UCLA121
obsid=1896
./my_program

perl 脚本的开头加载了一张包含短语的图像

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

但在新程序中变量为NULL。

答案1

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

export foo=bar

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

foo=bar ./my_prog.pl

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

my $barfoo = $ENV{'foo'};

答案2

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

开关-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

答案3

如果你这样称呼它

./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如果您得到令人困惑的结果,可以帮助您调试。

相关内容