长选项是否可以任意缩短为 GNU 选项约定的一部分,或其他一些约定/标准,或者只是由某些特殊的 C 函数提供?
例如,为什么行为python
和awk
行为不同?
$ python --version
Python 2.7.12
$ python --versio
Unknown option: --
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
$ awk --version
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
$ awk --versi
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
谢谢。
答案1
这是 GNU libc 的一个功能,来自getopt_long 联机帮助页:
如果缩写是唯一的或者与某些定义的选项完全匹配,则可以缩写长选项名称。
类似地,GNU libc 的 Argp 接口也允许缩写选项(尽管如果程序确实关心的话,可以拒绝它们)。
如中所述xclip 命令行上的缩写长选项, xlib 做同样的事情,所以xclock -dig -bri
与 相同xclock -digital -brief
。
我不建议在脚本中执行此操作:awk --ver
如果他们添加了awk --verbose
.
Python 大概已经编写了自己的参数解析器,可能可以移植到不使用 glibc 的系统。他们不能只是借用 glibc,因为他们没有使用 GNU GPL 许可证。