![选项和操作数之间的顺序?](https://linux22.com/image/62171/%E9%80%89%E9%A1%B9%E5%92%8C%E6%93%8D%E4%BD%9C%E6%95%B0%E4%B9%8B%E9%97%B4%E7%9A%84%E9%A1%BA%E5%BA%8F%EF%BC%9F.png)
当使用实用程序时,我们可以指定选项(及其选项参数)和/或操作数。
在大多数情况下(在符合某些标准(POSIX?)的意义上)
- 选项之间的顺序不重要吗?
- 操作数之间的顺序重要吗? (例如 的操作数
find
是有序的, 也是如此grep
) - 选项和操作数之间的顺序重要吗? (例如
ls . -l
并且rm mydir -r
据称与 POSIX 不兼容。) - 如果一个选项可以有一个选项参数,那么程序如何知道选项后面的内容是选项的参数还是操作数?
顺便说一句,在 C 中(例如 getopt)和 Python 中(例如arg解析) 选项和操作数符合相同的标准吗?
CFhttp://pubs.opengroup.org/stage7tc1/basedefs/V1_chap12.html
答案1
嗯,公用事业税法指南可以回答您有关选项顺序及其与其他选项的关系的问题:
准则 11:
不同选项相对于彼此的顺序并不重要,除非选项被记录为互斥的,并且此类选项被记录为覆盖其前面的任何不兼容选项。如果重复具有选项参数的选项,则应按照命令行上指定的顺序解释选项和选项参数组合。
订购这些产品的唯一重要地点是文档:
- 选项通常按字母顺序列出,除非这会使实用程序描述更加混乱。选项之间不存在基于其出现顺序的隐含关系,除非“选项”部分中另有说明,或者除非实用程序语法指南指南 11 中的例外情况适用。如果重复没有选项参数的选项,则结果未定义,除非另有说明。
但是,如果您有一个命令,其中一个参数不需要选项,而另一个命令需要选项,则您可以仅使用一个-
符号进行分组,因为带有选项的参数位于不需要选项的参数之后:
准则 5:
当组合在一个“-”分隔符后面时,应该接受一个或多个没有选项参数的选项,后跟最多一个带有选项参数的选项。
由于 POSIX 是一个标准,因此由技术程序员决定是否使其兼容,以及如何处理 option_arguments。您可以使用以下命令创建一个非 POSIX argparse Python 程序以下代码:
>>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+')
>>> parser.add_argument('+f')
>>> parser.add_argument('++bar')
这样,+
当遇到准则 4 时,您的程序参数将以 开头,而不是 POSIX:
准则 4:
所有选项前面都应带有“-”分隔符。
关于排序,只需使用该.parse_args()
函数来决定将参数固定到某个位置的位置即可。对于 argparse lib,没有操作数。一切都是一个论证。这里的操作数只是一个没有-
字符的参数,同样由程序员决定所制作的软件是否兼容 POSIX。
如果以正确的方式实现,argparse 本身就符合 POSIX 标准。建议阅读:
- arg解析– 命令行选项和参数解析
相关内容: