【问题标题】:What exactly do these arguments mean in linux?这些论点在 linux 中究竟意味着什么?
【发布时间】:2015-11-11 21:46:15
【问题描述】:

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

./program --something X Y

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

但是--something 呢?

非常感谢!

【问题讨论】:

  • 为什么会有所不同?它也将通过argv 传递。 (不是argc,这只是argv数组的长度。)
  • argv[1] 似乎合乎逻辑。不?这是您可以从任何初学者 C 书籍或教程中学习的内容,建议您通过类似的内容系统地学习基础知识。
  • 你提到了argv[2]argv[3]argv[0]argv[1] 会发生什么?
  • 是的,它只是文本。以“-”或“--”或其他任何开头只是程序的约定。
  • 你应该看看getopt

标签: c linux parameter-passing


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    argv[1]--somethingargv[2]Xargv[3]Y。遵循 *unix 约定,这意味着你的程序有一个名为“something”的参数,其值为“X”,而“Y”是程序应该应用的参数——但这完全取决于程序的实现.

    【讨论】:

    • --something 也有可能(甚至很常见)不带参数。
    【解决方案3】:

    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)。

    【讨论】:

    • 也非常感谢! :)
    猜你喜欢
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 2021-08-01
    • 2012-10-10
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多