Command-Line

對改變參數和選項的含義感到困惑,是否有官方標准定義?

  • May 19, 2017

在理解關於命令語法的選項和參數是什麼時,我遇到了一個令人困惑的變化。

例如,我遇到瞭如下定義:

  • command -a -b -c d e f

之間有些不同-a -b -c,將它們稱為選項或開關,d e f並將它們稱為參數。

  • command -a -b -c d e f

有些,例如bash手冊,呼叫所有-a -b -c d e f參數並解釋,它們都可以$1 $2 $3 $4 $5 $6分別從腳本訪問。

  • command -a b=c

有些人呼叫-a選項、b參數和c值,但其他人像前兩點一樣將它們混合在一起,以一種方式呼叫所有-a b c參數。

這三個版本只是眾多不同呼叫變體的範例,我什至不知道如何將它們全部列出,但我注意到肯定沒有固定的命名約定。

或者至少,我知道沒有標準化的命名約定,因為我遇到了不同的隨機來源,但即使在官方 Linux 和 GNU 附屬站點或手冊中,我也可能遇到這種不一致。

有沒有我可以參考的毫無疑問的官方命名方案?

改編自POSIX 標準的“實用程序參數語法”部分

utility_name [-a] [-b] [-c option_argument]
            [-d|-e] [-f[option_argument]] [operand...]

範例中的實用程序名為utility_name. 後面是optionsoption-argumentsoperands

-字元和單個字母或數字組成的參數,例如a,被稱為選項(或者,歷史上,標誌)。某些選項後跟一個option-argument,如 所示[-c option_argument]。最後一個選項和選項參數之後的參數被命名為操作數

該標準還將“參數”定義為

在 shell 命令語言中,傳遞給實用程序的參數相當於由其中一個函式argv創建的數組中的單個字元串。exec參數是命令名稱後面的選項、選項參數或操作數之一。


utility_name命令行上的所有內容都是實用程序的參數,如果它是 shell 腳本,它們都顯示在*位置參數中。*術語選項、選項參數和操作數是命令行上這些參數的更具體的名稱。

“標誌”和“開關”是“選項”的常見同義詞。

如果是

utility -a b=c
  • -a並且b=c是論據,
  • -a如果實用程序辨識它是一個選項(ln實用程序沒有-x選項,所以嚴格來說-x不是一個選項ln,並且ln -x會觸發診斷消息),
  • b=c如果選項帶有參數,則為選項-a參數,否則為操作數,
  • b並且c本身不是選項、選項參數,也不是操作數。

正如您從我上面的文字中註意到的那樣,從實用程序的概要(由實用程序的手冊中給出)工作會比嘗試解碼在命令行上鍵入的通用命令更容易。該手冊將明確說明哪些選項需要選項參數以及哪些參數是操作數等。

恕我直言,呼叫c“價值”是完全可以的。c這不是一個標準化的東西,但如果你說“是賦予”的價值b,很少有人會誤解你。從所討論的實用程序的上下文中可以清楚地看到。

例如

$ awk -v var="d" '...' data.in

任何知道的人awk都會說這-v var="d"意味著“在命令行上為awk變數var分配了值d”。

引用自:https://unix.stackexchange.com/questions/364383