仅kubectl
作为示例,我注意到
kubectl run --image nginx ...
和
kubectl run --image=nginx ...
两者都有效。
一般来说,对于命令行程序,是否有关于选项名称和值之间是否允许/需要等号的规则?
答案1
一般来说,如何解释命令行参数的实现完全由程序员自行决定。
也就是说,在很多情况下,“长”选项的值(例如用 引入)是用选项名称和值之间的--option_name
指定的(即),而对于单字母选项,更习惯用空格分隔标志和值,例如,或根本不使用分隔符(如)。=
--option_name=value
-o value
-oValue
GNU 日期实用程序手册页中的示例:
-d, --date=STRING display time described by STRING, not 'now'
-f, --file=DATEFILE like --date; once for each line of DATEFILE
正如您所看到的,当使用“短”形式(即 )时,该值将与选项开关以空格分隔-d
,而=
当使用“长”形式(即--date
)时,该值将由 。
编辑
正如史蒂芬·基特所指出的,GNU编码标准建议使用 getopt
和getopt_long
来解析命令行选项。手册页的getopt_long
状态:
--arg=param
长选项可以采用或形式的参数--arg param
。
因此,使用该函数的程序将接受这两种形式。
答案2
一般来说,对于命令行程序,是否存在关于开关和值之间是否允许/需要等号的规则?
不,没有。在开源世界和一般计算领域存在许多相互竞争的标准(强制 xkcd)并且每个人都可以随时提出新的规则和标准。 POSIX 实用程序参数语法
例如根本没有提到=
例如 while男人得到选择提到它。在实践中你可能会遇到各种命令行程序:
那些在=
空格之后或之后采用长选项值的选项:
$ touch a b c d
$ ls --format=verbose
total 0
-rw-r--r-- 1 ja users 0 Mar 17 14:39 a
-rw-r--r-- 1 ja users 0 Mar 17 14:39 b
-rw-r--r-- 1 ja users 0 Mar 17 14:39 c
-rw-r--r-- 1 ja users 0 Mar 17 14:39 d
$ ls --format verbose
total 0
-rw-r--r-- 1 ja users 0 Mar 17 14:39 a
-rw-r--r-- 1 ja users 0 Mar 17 14:39 b
-rw-r--r-- 1 ja users 0 Mar 17 14:39 c
-rw-r--r-- 1 ja users 0 Mar 17 14:39 d
那些后面不需要很长的选项值=
但需要空格的:
$ readelf -a main | grep 'program interpreter'
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
$ patchelf --set-interpreter=fake main
patchelf: getting info about '--set-interpreter=fake': No such file or directory
$ patchelf --set-interpreter fake main
$ readelf -a main | grep 'program interpreter'
[Requesting program interpreter: fake]
那些在之后取值=
但不采用-
or 选项的--
:
dd if=/dev/urandom of=~/Desktop/test.txt bs=1M count=3
给定的命令行程序以给定的方式接受输入可能有很多原因:作者的愿景,因为没有人关心,因为作者不知道其他人已经提出了标准,因为程序已经被移植到来自不同操作系统的 Unix 具有完全不同的约定或已经看起来像以前一样。