我們每天都在Terminal下面運(yùn)行很多命令宏榕,但是拓诸,你了解一條命令的標(biāo)準(zhǔn)格式嗎侵佃?對(duì)于我來(lái)說(shuō)麻昼,以前并沒(méi)怎么關(guān)心過(guò),都是拿來(lái)就用馋辈,不會(huì)就google抚芦。這幾天繼續(xù)看《Build Awesome Command-Line Applications in Ruby 2》,其中講到了GNU規(guī)定的命令行的格式迈螟,看完以后有種恍然大悟的感覺叉抡,才發(fā)現(xiàn)原來(lái)一條命令還有一個(gè)標(biāo)準(zhǔn)格式的,有了這個(gè)格式答毫,很多東西都不用記了褥民,一個(gè)命令用起來(lái)就覺得有章可循了,對(duì)一個(gè)不熟悉的命令洗搂,也更容易猜到消返,或是找到使用的方法。
廢話不多說(shuō)耘拇,一個(gè)GNU規(guī)定的命令行的格式如下圖所示:
一個(gè)完整的Terminal命令主要由4部分組成:
- 命令名(Executable): git
- 子命令(Command): push
- 選項(xiàng)(Options): --no-pager 和 -v都是
- 參數(shù)(arguments): origin和master
這里重點(diǎn)是選項(xiàng)(Options)的一些格式規(guī)定撵颊。
選項(xiàng)根據(jù)形式分類
從形式上來(lái)說(shuō),Options有兩種形式:簡(jiǎn)短形式和完整形式惫叛。
簡(jiǎn)短形式一般由一個(gè)連接符“-”后面跟一個(gè)字母組成:
ls -l -a -t # -l, -a, -t都是簡(jiǎn)短形式的Option
其實(shí)倡勇,幾個(gè)簡(jiǎn)短形式的options可以合并寫成一個(gè):
ls -lat
效果等同于 ls -l -a -t
完整形式的則一般由兩個(gè)連接符“--”開頭,接著是一個(gè)或多個(gè)完整的單詞嘉涌,如果有多個(gè)單詞妻熊,那么中間用一個(gè)連接符連接夸浅,如上面的“--no-pager”。
選項(xiàng)根據(jù)功能分類
從功能上來(lái)講固耘,Options一般有兩種题篷。一種的是“switch”(開關(guān)),用來(lái)enable或者是disable(一般以“--no”開頭)一些feature厅目,如上面的--no-pager
番枚,就是用來(lái)disable pager這個(gè)feature的。除此之外的另外一種是flag损敷。switch一般沒(méi)有參數(shù)葫笼,flag則一般有參數(shù)。
如果一個(gè)flag有參數(shù)拗馒,那么一般簡(jiǎn)短形式的flag跟它的參數(shù)之間由一個(gè)空格分開路星。而完整形式的flag則用一個(gè)“=”連接它的參數(shù),如:
curl -X POST http://www.google.com #POST是-X的參數(shù)
curl --request=POST http://www.google.com #POST是--request的參數(shù)诱桂。
這里要分清楚的是Option的參數(shù)和這整個(gè)命令的參數(shù)洋丐,在上面的例子中,POST
是Option -X
(或--request
)的參數(shù)挥等,而http://www.google.com
則是這整個(gè)命令的參數(shù)友绝。
對(duì)于一個(gè)Command Suite(什么叫Command Suite?)來(lái)說(shuō)肝劲,option又分為Global Options和Command Option迁客,這兩者是不一樣的。一個(gè)是對(duì)整個(gè)Command Suite的Option辞槐,一個(gè)是對(duì)于單個(gè)子命令的Option掷漱。它們甚至可以有相同的名字,含義卻不一樣榄檬,這點(diǎn)我相信應(yīng)該也是比較好理解的卜范。