1

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

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

我的问题是当我运行时:

perl myscript.pl --args $*

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

echo $*从 csh 脚本中,它会正确打印出所有参数。

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

有谁知道为什么会这样以及我该如何解决这个问题?

4

2 回答 2

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'
        };
于 2012-06-12T15:32:15.307 回答
1

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

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

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

于 2012-06-12T18:17:56.217 回答