Command

每個 CLI 命令選項是語義縮寫嗎

  • September 12, 2017

關鍵是關於語義。

curl -I,這意味著curl --head,讓我感到困惑。**我不知道字母表I代表的語義詞是什麼?它只是一個參考而不是語義詞的縮寫嗎?**同樣curl -b,這意味著curl --cookie,有同樣的困惑問題。

有人能說清楚發明者最初是如何進行這樣的設計的嗎?上面的例子是否意味著選項不必是語義的?

乍一看,這似乎是無法回答的,只是說,不,總能找到*看起來毫無意義的選項。*您可以製作自己的程序,故意使用完全無意義的命名選項。(當然,即使那樣,你也可以說它們是有意義的,如果它們被故意選擇為無意義的話。)

然而,在進一步考慮之後,我意識到選項語義的含糊不清實際上是命令行選項命名方式的一個重要且有用的部分,並且curl -I是一個特別說明性的例子。

正如 muru 所說,選項不必語義的。**但是curl’ 的-I選項語義的。**從curl(1)

-i/–include

        (HTTP) 在輸出中包含 HTTP 標頭。HTTP 標頭包括伺服器名稱、文件日期、HTTP 版本等內容…

-I/–head

       (HTTP/FTP/FILE) 僅獲取 HTTP-header!HTTP 伺服器具有 HEAD 命令,它用於獲取文件標題以外的任何內容。在 FTP 或 FILE 文件上使用時,curl 僅顯示文件大小和上次修改時間。

-i是 的縮寫形式--include,導致包含 HTTP 標頭。雖然-I是 的縮寫形式--head,但它在語義上是 的更強形式-i,因為它雖然-i給你 HTTP 標頭,但-I給你HTTP 標頭。

這可以深入了解您的更大問題:有許多不同的標準可以用來判斷選項名稱是否具有語義。當一個選項語義的時,它可能是有意的或無意的。如果您只對是否存在某種方式來記住選項感興趣,就好像它是語義的一樣,那麼是的,您總是可以編造一個名稱與其含義相關的原因。

一些選項在不止一種方面是語義化的。您可以使用for after、for before和for context使 GNUgrep顯示與匹配行相鄰的行,這兩者都提供。因此,在含義上非常接近的三個選項/ 、/和/的縮寫形式在字母表中也彼此接近。那是語義嗎?-A``-B``-C``-A``--after-context``-B``--before-context``-C``--context

要進一步追求這一點並獲得嚴格的答案,您可以搜尋適用的標準,如POSIX.1-2008。它禁止無意義的命名選項似乎非常難以置信,但我想你必須仔細閱讀整個內容才能確定。粗略的搜尋並沒有揭示任何選項意味著任何東西的要求。特別是,這些官方指南——僅對文件聲明符合它們的命令才需要——建議對選項的命名方式和傳遞它們的效果進行各種限制,但它們沒有提及任何可能被解釋為要求的內容或建議選項名稱有意義。即使你確實找到了一些東西,許多類 Unix 系統也並不完全符合 POSIX 標準……

但是整個構想——諮詢官方消息以確定(供應商必須假裝)每個選項的名稱是否有意義——有點愚蠢。**關於選項的真正有用之處在於它們的名稱可以以多種方式相互關聯。**它們可以根據單詞、其他選項或與其他選項的字母順序來命名。有時它們只是碰巧可用的一個字母(或數字)。考慮這些方法可以幫助您記住選項,在搜尋聯機幫助頁時找到選項,並就您自己的腳本或程序應該使用的選項名稱做出正確的決定。

作為最後一點,請記住,不僅僅是簡短的選項可以以不允許您推斷其含義的方式命名。例如,長格式選項--regex--regexptomlocate在語義上命名,因為它們都與正則表達式有關。但是它們的命名方式並沒有告訴您這--regexp意味著下一個參數是BRE--regex意味著所有模式參數都是ERE

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