我正在csh中编写一个shell脚本,其中一个函数是执行一个接受参数的perl脚本。
csh脚本本身接受命令行参数(存储为$ *中的空格分隔值),然后将其传递给perl脚本。
我的问题是,当我跑步时:
perl myscript.pl --args $*
perl脚本只获取$ *中的第一个参数。但是如果我跑:
echo $*
来自csh脚本,它正确地打印出所有参数。
可以传递任意数量的参数(因此我不能将我的参数存储在静态变量中并传递它们)。
有谁知道为什么会发生这种情况以及如何解决这个问题?
答案 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