这些参数在 linux 中究竟意味着什么?

What exactly do these arguments mean in linux?

我有一个用 C 编写的程序,我应该 运行 它在 linux 上的命令如下所示:

./program --something X Y

这到底是什么意思?我认为 X Y 将是参数,所以 argc[2] 将是 Xargc[3] 将是 Y?

但是 --something 呢?

非常感谢!

C 运行时不区分任何参数,无论它们是否以 -- 开头。所以你有,

argv[0] = "./program"
argv[1] = "--something"
argv[2] = "X"
argv[3] = "Y"
argv[4] = NULL

是您的程序为这些值赋予了意义。

命令本身之后的任何内容都将到达 argv:

argv[1]--somethingargv[2]Xargv[3]Y。遵循 *unix 约定,这意味着您的程序有一个名为 "something" 的参数,其值为 "X",而 "Y" 是程序应该应用的参数 - 但这是完全正确的对你的计划实施。

argcargv 而言,这些论点与其他论点没有什么不同。

它们的不同之处在于许多 Linux 工具(但不仅如此)使用 getopt 来更容易理解这些选项。当您需要多个可能的选项(或不记得它们的用途)时,这特别有用。

您通常可以有带或不带参数的多头和空头选项。

惯例也是 --help 打印出所有可用选项的摘要。

例如,在 man 的帮助下:

$ man --help
Usage: man [OPTION...] [SECTION] PAGE...

  -C, --config-file=FILE     use this user configuration file
  -d, --debug                emit debugging messages
  -D, --default              reset all options to their default values
      --warnings[=WARNINGS]  enable warnings from groff

在此特定示例中,您可以使用 -d--debug 来打开调试。 getopt(或类似的)用于将 -d--debug 解析为有意义的内容。 -C--config-file 也是等效的,但需要一个参数。

其他语言中也有类似的等效项(例如 Python's argparse,或 Java 中的 Apache Commons CLI)。