Perl GetOpt ::长模块错误

时间:2014-06-16 22:56:39

标签: regex perl getopt getopt-long

我正在使用GetOpt :: long模块从命令行获取参数并将其分配给相应的变量。但是我在打印时遇到错误。代码和错误如下:

#!usr/bin/perl

use strict;
use warnings;
use Getopt::Long;

GetOptions(
    "mount_path=s" => \my $old_path,
    "var=s"        => \my $var,
    "log_path=s"   => \my $log_path,
) or die "Error in input variables\n";

print <<"END_INPUTS";
 These are your inputs: 
 old_path= $old_path 
 var = $var 
 log_path=$log_path 
 Press enter twice if all looks GOOD 
 *********************************************************
END_INPUTS

命令行参数如下:

 perl getvar.pl --mount_path=/var/sslvpn --var=7.0.0.2_va-SSLVPN-!7.0.0.2.16sv+.jpn-05!j+g_554863- --log_path=log.txt  

运行此

时出现以下错误
-bash: !7: event not found

请有人帮我解决这个问题。谢谢。

1 个答案:

答案 0 :(得分:8)

这不是Perl问题。 bash shell正在处理!作为特殊字符。你必须引用那个论点。

 --var='7.0.0.2_va-SSLVPN-!7.0.0.2.16sv+.jpn-05!j+g_554863-' 

你可以说这是一个bash问题而不是Perl问题,因为消息说它是来自bash:

-bash: !7: event not found

Bash甚至从未进入运行程序的部分。