CSH将$ *传递给perl脚本无效

时间:2012-06-12 15:13:36

标签: perl csh

我正在csh中编写一个shell脚本,其中一个函数是执行一个接受参数的perl脚本。

csh脚本本身接受命令行参数(存储为$ *中的空格分隔值),然后将其传递给perl脚本。

我的问题是,当我跑步时:

perl myscript.pl --args $*

perl脚本只获取$ *中的第一个参数。但是如果我跑:

echo $*来自csh脚本,它正确地打印出所有参数。

可以传递任意数量的参数(因此我不能将我的参数存储在静态变量中并传递它们)。

有谁知道为什么会发生这种情况以及如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您需要在csh脚本中引用$*

perl myscript.pl --args "$*"

以下是myscript.pl

use warnings;
use strict;
use Getopt::Long;
use Data::Dumper;

my %opt;
GetOptions(\%opt, 'args=s');
print Dumper(\%opt);

以下是我的称呼方式:

script.csh arg1 arg2

$VAR1 = {
          'args' => 'arg1 arg2'
        };

答案 1 :(得分:1)

如果您希望参数最终在数组中而不在每个参数之前放置-args,则可以使用Getopt :: Long的实验性多值语法:

GetOptions("args=s{,}" => \@my_args);

请参阅https://metacpan.org/module/Getopt::Long#Options-with-multiple-values