是否有Linux命令行开关和参数的标准?

Dig*_*Man 51 linux coding-style command-line-interface

这更多是关于程序的调用,而不是任何语言或解析器(尽管我确信选择的解析器库可以依赖于此).看,我使用了很多Linux命令行实用程序.并且有一些明显的模式; ' - '在单个字母前面用于短选项,不带参数的多个选项可以组合,' - '在长版本的选项之前,依此类推.

但是,在某些情况下,大写用于反转选项.因此,' - d'可能意味着作为守护进程运行,但' - D'将不会作为守护进程运行.(如果你不想要它,为什么不省略选项?这一点从来都不清楚,但它实际上相当普遍,所以我认为必定有一些原因.)但在某些程序中,资本是完全不相关的选择; 如果'-d'作为守护进程运行,' - D'可能是启用调试模式.这背后是否有某种首要原则,哪种选择最好?或者我们只是处理"无论什么工作"?

除了(或代替)带参数的选项之外,还有一些命令只需要单独的参数.cp就是一个很好的例子; 除了一对很少使用的切换之外,它接收的最后一个参数被假定为目的地,并且选项列表和目的地之间的任何参数都被认为是源.是否有经验法则依赖于这样的顺序"好",而不是使用带参数的显式选项标志?

Apr*_*Ori 33

一般来说,是的.


小智 20

ESR在他的"UNIX编程艺术"一书中收集了大量有关此内容的信息.这是一个片段.

-a
All(没有参数).如果有一个GNU风格的--all选项,那么-a只不过是它的同义词,这将是非常令人惊讶的.示例:fuser(1),fetchmail(1).

附加,如tar(1).这通常与-d配对以进行删除.

-b
缓冲区或块大小(带参数).设置临界缓冲区大小,或(在与归档或管理存储介质有关的程序中)设置块大小.例子:du(1),df(1),tar(1).

批量.如果程序是自然交互式的,则-b可用于抑制提示或设置适合于接受来自文件而非人类操作员的输入的其他选项.示例:flex(1).

-c
命令(带参数).如果程序是通常从标准输入获取命令的解释器,则期望-c参数的选项将作为单行输入传递给它.对于shell和shell类解释器,这种约定特别强.示例:sh(1),ash(1),bsh(1),ksh(1),python(1).比较如下.

检查(不带参数).检查命令的文件参数的正确性,但不实际执行正常处理.经常用作解释命令文件的程序的语法检查选项.示例:getty(1),perl(1).

请参阅http://catb.org/~esr/writings/taoup/html/ch10s05.html上的完整列表


小智 10

Linux/GNU命令行界面遵循POSIX标准.GNU在其标准中指出了这一点:http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html.

命令行语法也是单Unix规范的一部分,但是--long-options是GNU创新IIRC.

请看:http://pubs.opengroup.org/onlinepubs/7908799/xbd/utilconv.html

但是,是的,这个标准实现为getopt.


小智 5

线程的快速摘要:

  • 除了错误消息(如果有)之外,当缺少或不正确的参数时,您的 CLI 应该显示帮助。

  • 您应该使用-单字母标志或选项以及--长选项,例如-a--all

  • 所有程序都应支持两个标准选项:-v --version-h --help.

    • -hand --help=> 给出使用信息并退出
    • -v--version=> 显示程序版本并退出

请参阅此答案中提供的链接(IEEE 和 GNU getopt)/sf/answers/627007251/