这更多是关于程序的调用,而不是任何语言或解析器(尽管我确信选择的解析器库可以依赖于此)。看,我使用了很多Linux命令行实用程序。并且有一些明显的模式; ' - '在单个字母前面用于短选项,不带参数的多个选项可以组合,' - '在长版本的选项之前,依此类推。
但是,在某些情况下,大小写用于反转选项。所以,' - d'可能意味着作为守护进程运行,但'-D'将不作为守护进程运行。 (如果你不想要它,为什么不省略选项?这一点从来都不清楚,但它实际上相当普遍,所以我认为必定有一些原因。)但在某些程序中,资本是完全不相关的选择;如果'-d'作为守护进程运行,' - D'可能是启用调试模式。这背后是否有某种首要原则,哪种选择最好?或者我们只是处理“无论什么工作”?
除了(或代替)带参数的选项之外,还有一些命令只需要单独的参数。 cp就是一个很好的例子;除了一对很少使用的切换之外,它接收的最后一个参数被假定为目的地,并且选项列表和目的地之间的任何参数都被认为是源。当依赖于这样的顺序“好”时,是否有经验法则,而不是使用带参数的显式选项标志?
答案 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)。
答案 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
所有程序都应支持两个标准选项:-v
--version
和-h
--help
。
-h
和--help
=>提供使用情况消息并退出-v
和--version
=>显示程序版本并退出查看此答案https://stackoverflow.com/a/8957246上提供的链接(IEEE和GNU getopt)
答案 4 :(得分:-2)
Unix : 单破折号 -
BSD:没有破折号
GNU:双破折号 --