題 linux中命令選項的順序是否重要?


例如,當我輸入時:

gcc -O hello.c -c

要么

gcc hello.c -c -O

兩人都沒有抱怨。

命令選項的順序是否重要?


12
2018-02-07 01:15


起源




答案:


這取決於程序本身;操作系統並不表示訂單是否重要。

海灣合作委員會的選擇是如此巨大,如果你能提供,我不能說任何權威 任何 任意順序的選擇;你必須閱讀該選項的文檔。也就是說,一般的經驗法則是,如果您有兩個或更多互斥選項(例如 -O1 -O2 對於不同的優化級別),程序通常會比以前的選項採用更晚的選項。同樣,這不是由linux強制執行的。

一個簡單的程序可以讓你以任何順序指定大多數選項 ls。列出當前目錄中包含詳細信息的所有文件都可以使用其中任何一個 ls -lals -al 要么 ls -l -a。但是,ls -l1(即'el''one')不會提供與ls -1l('one''l')相同的輸出。這些是相互排斥的選項,最後列出的是最先給出的選項。

還有一個奇怪的程序,它在到達時將參數應用於參數。因此,例如,您可能有一個假設的命令 blah -a 1 2 -b 3 哪裡 -a 適用於所有三個參數,但是 -b 僅適用於 3

同樣,這取決於相關的個別計劃。如果您不確定,請閱讀文檔。


17
2018-02-07 01:36





在某些情況下,命令行選項的順序甚至在GCC中也很重要。如果要鏈接靜態庫(.a),則指定 -llib1 -llib2 並且有一個功能 liblib2.a 調用函數 liblib1.a 如果沒有進入程序,則鏈接將因未解析的符號而失敗。使用共享庫,這不是問題。

一般而言,正如其他人所說,期權的順序可能會或可能不會產生影響。但是,下面兩個命令的輸出是不同的 - 所以參數的順序是 cat 改變輸出:

cat /etc/passwd /etc/group
cat /etc/group  /etc/passwd

另請注意,在Linux(特別是)上,GNU getopt() 很容易重新排序命令行,以便在任何其他參數之前處理所有選項(以減號開頭) - 除非你使用雙破折號 -- 標記參數的結尾,或者除非您設置環境變量POSIXLY_CORRECT。


4
2018-02-07 05:44





僅當您有2個互斥的選項時。否則,訂單無關緊要。

當然,這取決於程序的編寫方式,但應適用於所有普通的* nix工具。


4
2018-02-07 01:17





很難知道,正如其他已經告訴過你的那樣,它可能會有所作為(或不是)。

一個好的經驗法則是打開手冊頁並查看第一個示例,並在將arg放在那裡時使用該順序。

所以,如果我們看一下cat命令(man cat):

SYNOPSIS
       cat [OPTION] [FILE]...

似乎只要所有選項都在文件args之前,你應該沒問題。

如果我們看看gcc野獸(man gcc):

SYNOPSIS
       gcc [-c|-S|-E] [-std=standard]
           [-g] [-pg] [-Olevel]
           [-Wwarn...] [-pedantic]
           [-Idir...] [-Ldir...]
           [-Dmacro[=defn]...] [-Umacro]
           [-foption...] [-mmachine-option...]
           [-o outfile] [@file] infile...

       Only the most useful options are listed here; see below for the remainder.  g++ accepts mostly
       the same options as gcc.

作為cat命令,它不是那麼容易理解:)

但是如果你想安全地玩它,-c似乎在-O之前,然後infile(hello.c)似乎是最後的。

gcc -c -O hello.c

但正如你已經知道的那樣,因為其他人的工作......這是非常安全的:)


3
2018-02-07 07:18



如何鏈接標誌如何 -static-libstdc++? - Royi