如何使用Getopt::Long方法?

发布于 2024-09-07 06:24:53 字数 254 浏览 2 评论 0原文

如果输入命令执行是这样的,如何使用 Getopt::Long 方法:

$ testcmd -option check  ARG1 ARG2 ARG3

或者

$ testcmd  ARG1 ARG2 ARG3

How can I use Getopt::Long method if the input command execution is like this:

$ testcmd -option check  ARG1 ARG2 ARG3

or

$ testcmd  ARG1 ARG2 ARG3

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

勿忘初心 2024-09-14 06:24:53

一个简单的例子:

#! /usr/bin/perl

use warnings;
use strict;

use Getopt::Long;

sub usage { "Usage: $0 [--option=VALUE] ARG1 ARG2 ARG3\n" }

my $option = "default";

GetOptions("option=s", \$option)
  or die usage;

die usage unless @ARGV == 3;

print "$0: option=$option: @ARGV\n";

Getopt::Long 在接受的内容方面非常灵活:

$ ./cmd
Usage: ./cmd [--option=VALUE] ARG1 ARG2 ARG3

$ ./cmd 1 2 3
./cmd: option=default: 1 2 3

$ ./cmd --option=foo 4 5 6
./cmd: option=foo: 4 5 6

$ ./cmd -option=bar 7 8 9
./cmd: option=bar: 7 8 9

$ ./cmd -option check a b c
./cmd: option=check: a b c

A quick example:

#! /usr/bin/perl

use warnings;
use strict;

use Getopt::Long;

sub usage { "Usage: $0 [--option=VALUE] ARG1 ARG2 ARG3\n" }

my $option = "default";

GetOptions("option=s", \$option)
  or die usage;

die usage unless @ARGV == 3;

print "$0: option=$option: @ARGV\n";

Getopt::Long is quite flexible in what it will accept:

$ ./cmd
Usage: ./cmd [--option=VALUE] ARG1 ARG2 ARG3

$ ./cmd 1 2 3
./cmd: option=default: 1 2 3

$ ./cmd --option=foo 4 5 6
./cmd: option=foo: 4 5 6

$ ./cmd -option=bar 7 8 9
./cmd: option=bar: 7 8 9

$ ./cmd -option check a b c
./cmd: option=check: a b c
沙沙粒小 2024-09-14 06:24:53

您需要启用 pass_through 选项。文档引用如下:

pass_through(默认:禁用)

未知、不明确或
提供了无效的选项值
在 @ARGV 中传递而不是
被标记为错误。这使得
可以编写包装脚本
仅处理用户提供的部分内容
命令行参数,并传递
剩下的一些选择
程序。

如果启用了require_order,则选项
处理将在第一次终止
无法识别的选项或非选项,
以先到者为准。然而,如果
而是启用了 permute,结果
可能会变得混乱。

DVK 发布了一个示例 如何在另一个答案中执行此操作。如果你觉得他的回答有用,我会先投票。

You need to enable the pass_through option. Documentation quoted below:

pass_through (default: disabled)

Options that are unknown, ambiguous or
supplied with an invalid option value
are passed through in @ARGV instead of
being flagged as errors. This makes it
possible to write wrapper scripts that
process only part of the user supplied
command line arguments, and pass the
remaining options to some other
program.

If require_order is enabled, options
processing will terminate at the first
unrecognized option, or non-option,
whichever comes first. However, if
permute is enabled instead, results
can become confusing.

DVK's posted an example of how to do this in another answer. I'd upvote his answer first if you find it useful.

最冷一天 2024-09-14 06:24:53
#!/usr/bin/perl

use Getopt::Long;

my $cla = GetOptions (  "one=s"         =>      \$one,
                        "two=s"         =>      \$two,
                        "three=s"       =>      \$three,
                        "help|h|?"      =>      \$help,
) or usage ();

if ($help) {
        usage ();
}

my $first = $one;
my $second = $two;
my $third = $three;

printf ("%-7s %-9s %-7s\n", $first, $second, $third);

sub usage {
        print "\n$0\t" . "[ -one <text> -two <text> -three <text> ]\n\n";
        exit (0);
}
#!/usr/bin/perl

use Getopt::Long;

my $cla = GetOptions (  "one=s"         =>      \$one,
                        "two=s"         =>      \$two,
                        "three=s"       =>      \$three,
                        "help|h|?"      =>      \$help,
) or usage ();

if ($help) {
        usage ();
}

my $first = $one;
my $second = $two;
my $third = $three;

printf ("%-7s %-9s %-7s\n", $first, $second, $third);

sub usage {
        print "\n$0\t" . "[ -one <text> -two <text> -three <text> ]\n\n";
        exit (0);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文