我正在使用自己的库来解析argc / argv数据。我在考虑git。 git参数如何工作?
示例:
git commit -m“message”
这里,commit
不是一个选项,因为它没有连字符。是否有任何解释此类命令行选项行为的地方?
我知道我的库会比TCLAP或CLAP更糟糕但我不允许使用外部库。
编辑:有趣的链接 - > https://softwareengineering.stackexchange.com/questions/70357/command-line-options-style-posix-or-what
答案 0 :(得分:1)
Git似乎有不同的命令,因此您可以执行git status
,git add
等。因此,从用户的角度来看,git commit
似乎是对命令的调用{ {1}} git
是第一个参数 - 当你正在进行commit
时,绝对没有规则说你的参数必须以破折号或其他格式开头。
关于Git的有趣之处在于它也是可扩展的。如果您在路径中的某个位置创建了一个名为argc/argv
的脚本(注意单个单词,带有破折号),那么您可以在命令行上通过git-hello
调用它,使其与“真实”无法区分Git命令。
您可能会从上面猜到,实际上有一个名为git hello
,git-commit
的单独程序,等等,这是一个正确的猜测。浏览git-status
页面时值得注意,因为您可以执行man
之类的操作。事实上,Git确实有一个执行路径,其中包含这些脚本,您可以通过运行man git-commit
找到它。在我的系统上,那是git --exec-path
并且有一堆独立的脚本和符号链接返回给Git。
因此,就参数处理而言,Git实际上与大多数程序完全不同。您可以看到其他标准实用程序如何在其源中处理其命令行参数。例如,在其GNU实现中this is the source for cat
。如果你去/usr/lib/git-core
,你会注意到参数处理是通过main
函数,它与getopt_long
described in GNU docs一起,是{{1}的一部分}}