【问题标题】:How to pass multiple parameters for the same commandline argument?如何为同一个命令行参数传递多个参数?
【发布时间】:2017-04-03 22:49:02
【问题描述】:

场景:我需要将多个电视节目的名称传递给脚本: 例如。 ./script -a "Homeworld" -a "Supernatural"

我正在使用 Getopt::Long::Configure 来获取选项。

sub ArgParser
{
    my ($help,$addshow,$delshow,$checkshow,$listshows) = ();
    GetOptions ('help|h' => \$help,             
                'add|a=s' => \$addshow,             
                );
    if ($help)
    {
        HelpPrint;      
    }
    elsif ($addshow)
    {
        say $addshow;       
    }   
    else 
    {        
        HelpPrint("Invalid option or no options specified!");
    }
    exit;
}

ArgParser;

目前,脚本只接收最后一个指定的参数。如何检测是否在命令行上传递了同一参数的多个参数?

@ARGV 确实包含所有参数,那么我该如何使用它们呢?

【问题讨论】:

    标签: perl command-line


    【解决方案1】:

    您可以使用分隔符传递参数:

    Options with multiple values

    通常允许使用逗号分隔的值列表以及 多次出现的选项。这很容易使用 Perl 的 split() 和 join() 运算符:

        GetOptions ("library=s" => \@libfiles);
        @libfiles = split(/,/,join(',',@libfiles));
    

    或者另一种选择是:

        --library lib/stdlib --library lib/extlib
    

    要完成此行为,只需将数组引用指定为 选项的目的地:

        GetOptions ("library=s" => \@libfiles);
    

    使用第一个示例,您的命令行将是:

    ./script -a "Homeworld" -a "Supernatural" -a "Breaking Bad"
       -or-
    ./script -a "Homeworld,Supernatural,Breaking Bad"
       -or-
    ./script -a "Homeworld,Supernatural" -a "Breaking Bad"
    

    使用第二个示例,您的命令行将是:

    ./script -a "Homeworld" -a "Supernatural" -a "Expanse, The"
    

    【讨论】:

      猜你喜欢
      • 2015-04-11
      • 2018-03-06
      • 1970-01-01
      • 2011-02-12
      • 2016-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多