Linux 命令行开关和参数有标准吗? [已关闭]

问题描述 投票:0回答:5

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

但是,在某些情况下,大写字母用于“反转”选项。因此,“-d”可能意味着作为守护进程运行,但“-D”则表示作为守护进程运行。 (如果你不想要的话,为什么不直接忽略这个选项呢?这从来都不清楚,但它实际上很常见,所以我认为一定有一些原因。)但是在某些程序中,大写是一个完全不相关的选项;它是一个完全不相关的选项。如果“-d”作为守护进程运行,“-D”可能会启用调试模式。这背后是否有某种总体原则,以及哪个是最好的选择?或者我们只是在处理“任何有效的事情”? 还有一些命令,除了(或代替)带有参数的选项之外,只接受单独的参数。 cp 就是一个很好的例子;除了几个很少使用的切换之外,它接收的最后一个参数被假定为目标,并且选项列表和目标之间的任何参数都被假定为源。当“可以”依赖这样的顺序而不是使用带参数的显式选项标志时,是否有经验法则?

linux coding-style command-line-interface
5个回答
39
投票

    IEEE
  • GNU getopt

25
投票

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


追加,如 tar(1) 中所示。这通常与 -d 配对进行删除。

-b

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


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

-c

命令(带参数)。如果程序是一个通常从标准输入获取命令的解释器,则预计 -c 参数的选项将作为单行传递给它 输入。这个约定对于 shell 和 类似 shell 的解释器。示例:sh(1)、ash(1)、bsh(1)、ksh(1)、 蟒蛇(1)。比较下面的-e。


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

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


13
投票
http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html

. 命令行语法也是 Single Unix 规范的一部分,尽管 --long-options 是 GNU 创新 IIRC。

请参阅此处:

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

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


8
投票

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

    作为单个字母标志或选项,使用

    --
    作为长选项,例如
    -a
    --all
    
    

  • 所有程序都应支持两个标准选项:
  • -V

    --version
    -h
    --help
    
    

  • -h

    --help
    => 给出使用信息并退出 0
    
    

  • -V

    --version
    => 显示程序版本并退出 0
    
    

  • 请参阅此答案中提供的链接(IEEE 和 GNU getopt)
https://stackoverflow.com/a/8957246


-2
投票

BSD:没有破折号

GNU:双破折号 --

© www.soinside.com 2019 - 2024. All rights reserved.