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

时间:2012-01-21 22:17:58

标签: linux coding-style command-line-interface

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

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

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

5 个答案:

答案 0 :(得分:31)

一般来说,是的。

答案 1 :(得分:18)

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

  

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

     

追加,如tar(1)。这通常与-d一起用于删除。

     

-b
  缓冲区或块大小(带参数)。设置关键缓冲区大小,或(在与归档或管理存储有关的程序中)   media)设置块大小。示例:du(1),df(1),tar(1)。

     

批次。如果程序是自然交互式的,则可以使用-b   禁止提示或设置适合接受输入的其他选项   来自文件而不是人类操作员。示例:flex(1)。

     

-c
  命令(带参数)。如果程序是通常从标准输入获取命令的解释器,则预期该程序   -c参数的选项将作为单行传递给它   输入。贝壳和贝壳的这种惯例特别强烈   贝壳式口译员。示例:sh(1),ash(1),bsh(1),ksh(1),   蟒(1)。比较如下。

     

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

请参阅http://catb.org/~esr/writings/taoup/html/ch10s05.html

的完整列表

答案 2 :(得分: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实现的。

答案 3 :(得分:1)

线程的快速摘要:

  • 如果缺少或不正确的参数,您的CLI应该显示帮助,并显示错误消息。

  • 您应将-用于单个字母标志或选项,并将--用于长选项,例如-a--all

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

    • -h--help =>提供使用情况消息并退出
    • -v--version =>显示程序版本并退出

查看此答案https://stackoverflow.com/a/8957246上提供的链接(IEEE和GNU getopt)

答案 4 :(得分:-2)

Unix : 单破折号 -

BSD:没有破折号

GNU:双破折号 --