僅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具有完全不同的約定或已經看起來像以前一樣。