【发布时间】:2016-08-24 23:29:51
【问题描述】:
我有一个 perl 文件,它基本上接受如下输入:
use strict;
use File::Copy;
use File::Path;
use Sys::Hostname;
use Getopt::Long;
use File::Spec;
use File::Compare;
use MIME::Base64;
use Digest::MD5 qw(md5_hex);
my %hmpParams;
my $keybindings;
my $keybindings1;
my $keybindings2;
my $filename;
my $osname;
my $copy="cp";
&parseCommandLineParams();
while ((my $k, my $v) = each %hmpParams ){
print($k . " = " . $v . "\n");
}
sub parseCommandLineParams(){
GetOptions ( 'bindings:s' => \$hmpParams{bindings},
'filename:s' => \$hmpParams{filename},
'key:s' => \$hmpParams{key},
'bindings1:s' => \$hmpParams{bindings1},
'bindings2:s' => \$hmpParams{bindings2}
);
}
我正在执行这个 Perl 文件如下:
perl test.pl "-bindings" "+WBAOBtud/UuM7uuCG2T+0ZvoCeuu/x24ovYkwjI2YM=" "-filename" "/tmp/keyMapperFile_2016-08-24-04:43:06" "-key" "avqijvmlf5ipq_5j0038opvhqmh_28jm8d913ptv0_3ie1ctia2cdqd" "-bindings1" "" "-bindings2" ""
输出:
Unknown option: wbaobtud/uum7uucg2t+0zvoceuu/x24ovykwji2ym
bindings2 =
filename = /tmp/keyMapperFile_2016-08-24-04:43:06
bindings =
bindings1 =
key = avqijvmlf5ipq_5j0038opvhqmh_28jm8d913ptv0_3ie1ctia2cdqd
我看到,只要选项的值前面有 + 号,它就不会将其识别为值,而是将其视为选项。如何解决此错误?这背后的原因是什么?
【问题讨论】:
-
从参数名称中删除双引号。喜欢
perl test.pl --bindings "+WBAOBtud/UuM7uuCG2T+0ZvoCeuu/x24ovYkwjI2YM=" --filename ... -
@ChankeyPathak 将无效。 (它们将在传递给脚本之前被 shell 删除)。
-
啊,我明白了。谢谢!
标签: perl