命令列選項在選項名稱和值之間是否使用等號?

命令列選項在選項名稱和值之間是否使用等號?

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編碼標準建議使用 getoptgetopt_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具有完全不同的約定或已經看起來像以前一樣

相關內容