Linux下高效編寫Shell——shell特殊字符匯總

Linux下無論如何都是要用到shell命令的,在Shell的實(shí)際使用中,有編程經(jīng)驗(yàn)的很容易上手,但稍微有難度的是shell里面的那些個(gè)符號(hào),各種特殊的符號(hào)在我們編寫Shell腳本的時(shí)候如果能夠用的好,往往能給我們起到事半功倍的效果,為此,特地將Shell里面的一些符號(hào)說明羅列成對(duì)照表的形式,以便快速的查找。看看你知道下表中哦你的哪些Shell符號(hào)呢?

Shell符號(hào)及各種解釋對(duì)照表:

Shell符號(hào) 使用方法及說明
# 注釋符號(hào)(Hashmark[Comments])
1.在shell文件的行首,作為shebang標(biāo)記,#!/bin/bash;
2. 其他地方作為注釋使用,在一行中,#后面的內(nèi)容并不會(huì)被執(zhí)行,除非;
3. 但是用單/雙引號(hào)包圍時(shí),#作為#號(hào)字符本身,不具有注釋作用。
; 分號(hào)。作為多語句的分隔符(Command separator [semicolon])。
多個(gè)語句要放在同一行的時(shí)候,可以使用分號(hào)分隔。注意,有時(shí)候分號(hào)需要轉(zhuǎn)義。
;; 連續(xù)分號(hào)(Terminator [double semicolon])。
在使用case選項(xiàng)的時(shí)候,作為每個(gè)選項(xiàng)的終結(jié)符。在Bash version 4+ 的時(shí)候,還可以使用[;;&], [;&]
. 點(diǎn)號(hào)(dot command [period])。
1. 相當(dāng)于bash內(nèi)建命令source,如:

#!/bin/bash
. data-file
#包含data-file;

2. 作為文件名的一部分,在文件名的開頭,表示該文件為隱藏文件,ls一般不顯示出來(ls -a 可以顯示);
3.作為目錄名,一個(gè)點(diǎn)代表當(dāng)前目錄,兩個(gè)點(diǎn)號(hào)代表上層目錄(當(dāng)前目錄的父目錄)。注意,兩個(gè)以上的點(diǎn)不出現(xiàn),除非你用引號(hào)(單/雙)包圍作為點(diǎn)號(hào)字符本身;
4. 正則表達(dá)式中,點(diǎn)號(hào)表示任意一個(gè)字符。
" 雙引號(hào)(partial quoting [double quote])。

部分引用。雙引號(hào)包圍的內(nèi)容可以允許變量擴(kuò)展,也允許轉(zhuǎn)義字符的存在。如果字符串內(nèi)出現(xiàn)雙引號(hào)本身,需要轉(zhuǎn)義,因此不一定雙引號(hào)是成對(duì)的。
' 單引號(hào)(full quoting [single quote])。

單引號(hào)括住的內(nèi)容,被視為單一字符串,引號(hào)內(nèi)的禁止變量擴(kuò)展,所有字符均作為字符本身處理(除單引號(hào)本身之外),單引號(hào)必須成對(duì)出現(xiàn)。
, 逗號(hào)(comma operator [comma])。

1. 用在連接一連串的數(shù)學(xué)表達(dá)式中,這串?dāng)?shù)學(xué)表達(dá)式均被求值,但只有最后一個(gè)求值結(jié)果被返回。如:

#!/bin/bash
let t1=((a=5+1, b=7+2))
echo t1=$t1, a=$a, b=$b
## 這個(gè)$t1=$b;

2. 用于參數(shù)替代中,表示首字母小寫,如果是兩個(gè)逗號(hào),則表示全部小寫,注意,這個(gè)特性在bash version 4的時(shí)候被添加的。例子:

a="ATest"
echo ${a,}
echo ${a,,}
## 前面輸出aTest,后面輸出的是atest。
\ 反斜線,反斜桿(escape [backslash])。

1. 放在特殊符號(hào)之前,轉(zhuǎn)義特殊符號(hào)的作用,僅表示特殊符號(hào)本身,這在字符串中常用;
2. 放在一行指令的最末端,表示緊接著的回車無效(其實(shí)也就是轉(zhuǎn)義了Enter),后繼新行的輸入仍然作為當(dāng)前指令的一部分。
/ 斜線,斜桿(Filename path separator [forward slash])。

1.作為路徑的分隔符,路徑中僅有一個(gè)斜桿表示根目錄,以斜桿開頭的路徑表示從根目錄開始的路徑;
2.在作為運(yùn)算符的時(shí)候,表示除法符號(hào)。如:a=4/2
` 反引號(hào),后引號(hào)(Command substitution[backquotes])。

命令替換。這個(gè)引號(hào)包圍的為命令,可以執(zhí)行包圍的命令,并將執(zhí)行的結(jié)果賦值給變量。如:a=`dirname '/tmp/x.log'` 。后面dirname返回的結(jié)果會(huì)賦值給a,注意,此處Mitchell特地使用了反引號(hào)和單引號(hào),注意區(qū)別。
: 冒號(hào)(null command [colon])。

空命令,這個(gè)命令什么都不做,但是有返回值,返回值為0(即:true)。這個(gè)命令的作用非常奇妙。

1. 可做while死循環(huán)的條件;

2. 在if分支中作為占位符(即某一分支什么都不做的時(shí)候);

3. 放在必須要有兩元操作的地方作為分隔符,如:: ${username=`whoami`}

4. 在參數(shù)替換中為字符串變量賦值,在重定向操作(>)中,把一個(gè)文件長(zhǎng)度截?cái)酁?(:>>這樣用的時(shí)候,目標(biāo)存在則什么都不做),這個(gè)只能在普通文件中使用,不能在管道,符號(hào)鏈接和其他特殊文件中使用;

5. 甚至你可以用來注釋(#后的內(nèi)容不會(huì)被檢查,但:后的內(nèi)容會(huì)被檢查,如果有語句如果出現(xiàn)語法錯(cuò)誤,則會(huì)報(bào)錯(cuò));

6. 你也可以作為域分隔符,比如環(huán)境變量$PATH中,或者passwd中,都有冒號(hào)的作為域分隔符的存在;

7. 你也可以將冒號(hào)作為函數(shù)名,不過這個(gè)會(huì)將冒號(hào)的本來意義轉(zhuǎn)變(如果你不小心作為函數(shù)名,你可以使用unset -f : 來取消function的定義)。
! 感嘆號(hào)(reverse (or negate) [bang],[exclamation mark])。

取反一個(gè)測(cè)試結(jié)果或退出狀態(tài)。

1. 表示反邏輯,比如后面的!=,這個(gè)是表示不等于;

2. 表示取反,如:ls a[!0-9] #表示a后面不是緊接一個(gè)數(shù)字的文件;

3. 在不同的環(huán)境里面,感嘆號(hào)也可以出現(xiàn)在間接變量引用里面;

4. 在命令行中,可以用于歷史命令機(jī)制的調(diào)用,你可以試試!$,!#,或者!-3看看,不過要注意,這點(diǎn)特性不能在腳本文件里面使用(被禁用)。
* 星號(hào)(wildcard/arithmetic operator[asterisk])。

1. 作為匹配文件名擴(kuò)展的一個(gè)通配符,能自動(dòng)匹配給定目錄下的每一個(gè)文件;

2. 正則表達(dá)式中可以作為字符限定符,表示其前面的匹配規(guī)則匹配任意次;

3. 算術(shù)運(yùn)算中表示乘法。
** 雙星號(hào)(double asterisk)。算術(shù)運(yùn)算中表示求冪運(yùn)算。
? 問號(hào)(test operator/wildcard[Question mark])。

1. 表示條件測(cè)試;

2. 在雙括號(hào)內(nèi)表示C風(fēng)格的三元操作符((condition?true-result:false-result));

3. 參數(shù)替換表達(dá)式中用來測(cè)試一個(gè)變量是否設(shè)置了值;

4. 作為通配符,用于匹配文件名擴(kuò)展特性中,用于匹配單個(gè)字符;

5. 正則表達(dá)式中,表示匹配其前面規(guī)則0次或者1次。
$ 美元符號(hào)(Variable substitution[Dollar sign])。

1. 作為變量的前導(dǎo)符,用作變量替換,即引用一個(gè)變量的內(nèi)容,比如:echo $PATH;

2. 在正則表達(dá)式中被定義為行末(End of line)。

${} 參數(shù)替換(Variable substitution)。

用于在字符串中表示變量。
$'...' 引用內(nèi)容展開,執(zhí)行單引號(hào)內(nèi)的轉(zhuǎn)義內(nèi)容(單引號(hào)原本是原樣引用的),這種方式會(huì)將引號(hào)內(nèi)的一個(gè)或者多個(gè)[\]轉(zhuǎn)義后的八進(jìn)制,十六進(jìn)制值展開到ASCII或Unicode字符。
$*

$@
位置參數(shù)(Positional Parameters)。

這個(gè)在使用腳本文件的時(shí)候,在傳遞參數(shù)的時(shí)候會(huì)用到。兩者都能返回調(diào)用腳本文件的所有參數(shù),但$是將所有參數(shù)作為一個(gè)整體返回(字符串),而$@是將每個(gè)參數(shù)作為單元返回一個(gè)參數(shù)列表。注意,在使用的時(shí)候需要用雙引號(hào)將$,$@括住。這兩個(gè)變量受到$IFS的影響,如果在實(shí)際應(yīng)用中,要考慮其中的一些細(xì)節(jié)。
$# 表示傳遞給腳本的參數(shù)數(shù)量。
$? 此變量值在使用的時(shí)候,返回的是最后一個(gè)命令、函數(shù)、或腳本的退出狀態(tài)碼值,如果沒有錯(cuò)誤則是0,如果為非0,則表示在此之前的最后一次執(zhí)行有錯(cuò)誤。
$$ 進(jìn)程ID變量,這個(gè)變量保存了運(yùn)行當(dāng)前腳本的進(jìn)程ID值。
() 圓括號(hào)(parentheses)。

1, 命令組(Command group)。由一組圓括號(hào)括起來的命令是命令組,命令組中的命令實(shí)在子shell(subshell)中執(zhí)行。因?yàn)槭窃谧觭hell內(nèi)運(yùn)行,因此在括號(hào)外面是沒有辦法獲取括號(hào)內(nèi)變量的值,但反過來,命令組內(nèi)是可以獲取到外面的值,這點(diǎn)有點(diǎn)像局部變量和全局變量的關(guān)系,在實(shí)作中,如果碰到要cd到子目錄操作,并在操作完成后要返回到當(dāng)前目錄的時(shí)候,可以考慮使用subshell來處理;

2. 用于數(shù)組的初始化。
{x,y,z,...} 花括號(hào)擴(kuò)展(Brace Expansion)。

在命令中可以用這種擴(kuò)展來擴(kuò)展參數(shù)列表,命令將會(huì)依照列表中的括號(hào)分隔開的模式進(jìn)行匹配擴(kuò)展。注意的一點(diǎn)是,這花括號(hào)擴(kuò)展中不能有空格存在,如果確實(shí)有必要空格,則必須被轉(zhuǎn)義或者使用引號(hào)來引用。例子:echo {a,b,c}-{\ d," e",' f'}
{a..z} 在Bash version 3時(shí)添加了這種花括號(hào)擴(kuò)展的擴(kuò)展,可以使用{A..Z}表示A-Z的所有字符列表,這種方式的擴(kuò)展Mitchell測(cè)試了一下,好像僅適用于A-Z,a-z,還有數(shù)字{最小..最大}的這種方式擴(kuò)展。
{} 代碼塊(curly brackets)。

這個(gè)是匿名函數(shù),但是又與函數(shù)不同,在代碼塊里面的變量在代碼塊后面仍能訪問。注意:花括號(hào)內(nèi)側(cè)需要有空格與語句分隔。另外,在xargs -i中的話,還可以作為文本的占位符,用以標(biāo)記輸出文本的位置。
{} ; 這個(gè){}是表示路徑名,這個(gè)并不是shell內(nèi)建的,現(xiàn)在接觸到的情況看,好像只用在find命令里。注意后面的分號(hào),這個(gè)是結(jié)束find命令中-exec選項(xiàng)的命令序列,在實(shí)際使用的時(shí)候,要轉(zhuǎn)義一下以免被shell理解錯(cuò)誤。
[] 中括號(hào)(brackets)。

1. 測(cè)試的表示,Shell會(huì)測(cè)試在[]內(nèi)的表達(dá)式,需要注意的是,[]是Shell內(nèi)建的測(cè)試的一部分,而非使用外部命令/usr/bin/test的鏈接;

2. 在數(shù)組的上下文中,表示數(shù)組元素,方括號(hào)內(nèi)填上數(shù)組元素的位置就能獲得對(duì)應(yīng)位置的內(nèi)容,如:

Array[1]=xxx

echo ${Array[1]};

3. 表示字符集的范圍,在正表達(dá)式中,方括號(hào)表示該位置可以匹配的字符集范圍。
[[]] 雙中括號(hào)(double brackets)。

這個(gè)結(jié)構(gòu)也是測(cè)試,測(cè)試[[]]之中的表達(dá)式(Shell的關(guān)鍵字)。這個(gè)比單中括號(hào)更能防止腳本里面的邏輯錯(cuò)誤,比如:&&,||,<,>操作符能在一個(gè)[[]]里面測(cè)試通過,但是在[]卻不能通過。[[]]里面沒有文件名擴(kuò)展(filename expansion)或是詞分隔符(Word splitting),但是可以用參數(shù)擴(kuò)展(Parameter expansion)和命令替換(command substitution)。不用文件名通配符和像空白這樣的分隔符。注意,這里面如果出現(xiàn)了八進(jìn)制,十六進(jìn)制等,shell會(huì)自動(dòng)執(zhí)行轉(zhuǎn)換比較。
$[...] 詞表達(dá)表示整數(shù)擴(kuò)展(integer expansion)。

在方括號(hào)里面執(zhí)行整數(shù)表達(dá)式。例:

a=3
b=7
echo $[$a+$b]
echo $[$a*$b]
##返回是10和21
(()) 雙括號(hào)(double parentheses)。

表示整數(shù)擴(kuò)展(integer expansion)。功能和上面的$[]差不多,但是需要注意的是,$[]是會(huì)返回里面表達(dá)式的值的,而(())只是執(zhí)行,并不會(huì)返回值。兩者執(zhí)行后如果變量值發(fā)生變化,都會(huì)影響到后繼代碼的運(yùn)行。可對(duì)變量賦值,可以對(duì)變量進(jìn)行一目操作符操作,也可以是二目,三目操作符。
>

&<

>&

>>

<

<>
重定向(redirection)。

scriptname >filename 重定向scriptname的輸出到文件filename中去,如果文件存在則覆蓋;

command &>filename 重定向command的標(biāo)準(zhǔn)輸出(stdout)和標(biāo)準(zhǔn)錯(cuò)誤(stderr)到文件filename中;

command >&2 把command的標(biāo)準(zhǔn)輸出(stdout)重定向到標(biāo)準(zhǔn)錯(cuò)誤(stderr)中;

scriptname >>filename 把scriptname的輸出(同>)追加到文件filenmae中,如果文件不存在則創(chuàng)建。

[i]<>filename 打開filename這個(gè)文件用來讀或者寫,并且給文件指定i為它的文件描述符(file descriptor),文件不存在就會(huì)創(chuàng)建。
(command)>

<(command)
這是進(jìn)程替換(Process Substitution)。

使用的時(shí)候注意,括號(hào)和<,>之間是不能有空格的,否則報(bào)錯(cuò)。其作用有點(diǎn)類似通道,但和管道在用法上又有些不同,管道是作為子進(jìn)程的方式來運(yùn)行的,這個(gè)命令會(huì)在/dev/fd/下面產(chǎn)生類似/dev/fd/63,/dev/fd/62這類臨時(shí)文件,用來傳遞數(shù)據(jù)。

Mitchell個(gè)人猜測(cè)之所以用這種方法來傳遞,是因?yàn)榍昂髢蓚€(gè)不屬于同一個(gè)進(jìn)程,因此需要用共享文件的方式來傳遞資料(這么說其實(shí)管道也應(yīng)該有同樣的文件?)。網(wǎng)上有人說這個(gè)只是共享文件而已,但是經(jīng)過測(cè)試,發(fā)現(xiàn)雖然有/dev/fd/63這樣的文件產(chǎn)生,但是這個(gè)文件其實(shí)是指向pipe:[43434]這樣的通道的鏈接。
<< 雙小于號(hào)(here-document[double less then marks])。

這個(gè)也被稱為Here-document,用來將后繼的內(nèi)容重定向到左側(cè)命令的stdin中。<<可以節(jié)省格式化時(shí)間,別且使命令執(zhí)行的處理更容易。在實(shí)作的時(shí)候只需要輸入<<和終止標(biāo)志符,而后(一般是回車后)你就可以輸入任何內(nèi)容,只要在最后的新行中輸入終止標(biāo)志符,即可完成數(shù)據(jù)的導(dǎo)入。使用here-document的時(shí)候,你可以保留空格,換行等。如果要讓shell腳本更整潔一點(diǎn),可以在<<和終止符之間放上一個(gè)連字符(-)。
<<< 三個(gè)小于號(hào)(here-strings)。Here-字串和Here-document類似,here-strings語法:command [args] <<<["]$word["];$word會(huì)展開并作為command的stdin。
<

>
小于,大于號(hào)(ASCII Comparison)。

ASCII比較,進(jìn)行的是變量的ASCII比較,字串?數(shù)字?呃...這個(gè)...不就是ASCII比較么?
\<...\> 詞界符(word boundary)。

這個(gè)是用在正則表達(dá)式中的一個(gè)特殊分隔符,用來標(biāo)記單詞的分界。比如:the會(huì)匹配there,another,them等等,如果僅僅要匹配the,就可以使用這個(gè)詞界符,<the>就只能匹配the了。
管道(pipe)。

管道是Linux,Unix都有的概念,是非常基礎(chǔ),也是非常重要的一個(gè)概念。它的作用是將管道前(左邊)的命令產(chǎn)生的輸出(stdout)作為管道后(右邊)的命令的輸入(stdin)。如:ls | wc -l,使用管道就可以將命令連接在一起。注意:管道是每一個(gè)進(jìn)程的標(biāo)準(zhǔn)輸出都會(huì)作為下一個(gè)命令的標(biāo)準(zhǔn)輸入,期間的標(biāo)準(zhǔn)輸出不能跨越管道作為后繼命令的標(biāo)準(zhǔn)輸入,如:
cat filename | ls -al | sort 。想想這個(gè)的輸出? 同時(shí),管道是以子進(jìn)程來運(yùn)行的,所以管道并不能引起變量改變。
>| 強(qiáng)制重定向(force redirection)。

這會(huì)強(qiáng)制重寫已經(jīng)存在的文件。
& 與號(hào)(Run job in background[ampersand])。

如果命令后面跟上一個(gè)&符號(hào),這個(gè)命令將會(huì)在后臺(tái)運(yùn)行。有的時(shí)候,腳本中在一條在后臺(tái)運(yùn)行的命令可能會(huì)引起腳本掛起,等待輸入,出現(xiàn)這種情況可以在原有的腳本后面使用wait命令來修復(fù)。
&&

||
邏輯操作符(logical operator)。

在測(cè)試結(jié)構(gòu)中,可以用這兩個(gè)操作符來進(jìn)行連接兩個(gè)邏輯值。||是當(dāng)測(cè)試條件有一個(gè)為真時(shí)返回0(真),全假為假;&&是當(dāng)測(cè)試條件兩個(gè)都為真時(shí)返回真(0),有假為假。
- 減號(hào),連字符(Hyphen/minus/dash)。

1. 作為選項(xiàng),前綴[option, prefix]使用。用于命令或者過濾器的選項(xiàng)標(biāo)志;操作符的前綴。如:

## COMMAND -[選項(xiàng)列表]
ls -al
sort -dfu $file
set-- $variable
if[ $file -ot $file2 ]
then
echo "$file is older than $file2."
fi

2. 用于stdin或者stdout的重定向的源或目的[dash].在tar沒有bunzip2的程序補(bǔ)丁時(shí),我們可以這樣: bunzip2 linux-2.6.13.tar.bz2 | tar xvf - 。將前面解壓的數(shù)據(jù)作為tar的標(biāo)準(zhǔn)輸入(這里使用一個(gè)-表示)

注意:在實(shí)作的時(shí)候,如果文件名是以[-]開頭的,那么在加上這個(gè)作為定向操作符的時(shí)候,可能會(huì)出錯(cuò),此時(shí)應(yīng)該為文件加上合適的前綴路徑,以避免這種情況發(fā)生,同樣的,在echo變量的時(shí)候,如果變量是以[-]開始,那么可能也會(huì)產(chǎn)生意想不到的結(jié)果,為了保險(xiǎn)起見,可以使用雙引號(hào)引用標(biāo)量:

var="-n"
echo $var
## 試試看有什么輸出?

還有,這種表示方法不是Bash內(nèi)建的,要達(dá)到此點(diǎn)的這種效果,需要看你使用的軟件是否支持這種操作;

3. 表示先前的工作目錄(previous working directory),因此,如果你cd到其他目錄下要放回前一個(gè)路徑的時(shí)候,可以使用cd -來達(dá)到目的,其實(shí),這里的[-]使用的是環(huán)境變量的$OLDPWD,注意:這里的[-]和前一點(diǎn)是不同的;

4. 減號(hào)或者負(fù)號(hào),用在算術(shù)操作中。
= 等號(hào)(Equals)。

1. 賦值操作,給變量賦值,么有空格在等號(hào)兩側(cè);

2. 在比較測(cè)試中作為比較符出現(xiàn),這里要注意,如果在中括號(hào)中作為比較出現(xiàn),需要有空格符在等號(hào)左右兩側(cè)。
+ 加號(hào)(Plus)。

1. 算術(shù)操作符,表示加法;

2. 在正則表達(dá)式中,表示的是其前的這個(gè)匹配規(guī)則匹配最少一次;

3.在命令或過濾器中作為選項(xiàng)標(biāo)記,在某些命令或者內(nèi)置命令中使用+來啟用某些選項(xiàng),使用-來禁止;

4. 在參數(shù)替換(parameter substitution)中,+前綴表示替代值(當(dāng)變量為空的時(shí)候,使用+后面的值)
% 百分號(hào)(modulo[percent sign])。

1.在算術(shù)運(yùn)算中,這個(gè)是求模操作符,即兩個(gè)數(shù)進(jìn)行除法運(yùn)算后的余數(shù);

2. 在參數(shù)替換(parameter substitution)中,可以作為模式匹配。例子:

p=b*9
var="abcd12345abc479"
echo ${var%p}, ${var%%p}
##從右邊開始查找(想想從左是那個(gè)符號(hào)?)
##任何在b和9之間的內(nèi)容(含)
##第一個(gè)是找到最短的符合匹配項(xiàng)
##后一個(gè)是找最大符合的匹配項(xiàng)(貪婪匹配?)
~ 波浪號(hào)(Home directory[tilde])。

這個(gè)和內(nèi)部變量$HOME是一樣的。默認(rèn)表示當(dāng)前用戶的家目錄(主目錄),這個(gè)和~/效果一致,如果波浪號(hào)后面跟用戶名,表示是該用戶的家目錄。
~+ 當(dāng)前的工作目錄(current working directory)。

這個(gè)和內(nèi)置變量$PWD一樣。
~- 前一個(gè)工作目錄(previous working directory)。

這個(gè)和內(nèi)部變量$OLDPWD一致,之前的[-]也一樣。
=~ Bash 版本3中有介紹,這個(gè)是正則表達(dá)式匹配。可用在[[]]測(cè)試中,比如:

var="this is a test message."
[["$var"=~ tf*message ]]&& echo "Sir. Found that."|| echo "Sorry Sir. No match be found."
##你可以修改中間的正則表達(dá)式匹配項(xiàng),正則表達(dá)式可以但不一定需要使用雙引號(hào)括起來。
^ 脫字符(caret)。

1. 在正則表達(dá)式中,作為一行的行首(beginning-of-line)位置標(biāo)志符;

2. 在參數(shù)替換(Parameter substitution)中,這個(gè)用法有兩種,一個(gè)脫字符(${var}),或兩個(gè)(${var^}),分別表示第一個(gè)字母大寫,全部大寫的意思(Bash version >=4)。
空白 空白符(Whitespace)。

空白符不僅僅是指空格(spaces),還包括制表符(tabs),空行(blank lines),或者這幾種的組合。可用做函數(shù)的分隔符,分隔命令或變量,空行不會(huì)影響腳本的行為,因此可以用它來規(guī)劃腳本代碼,以增加可讀性,在內(nèi)置的特殊變量$IFS可以用來針對(duì)某些命令進(jìn)行輸入的參數(shù)進(jìn)行分割,其默認(rèn)就是空白符。在字符串或變量中如果有空白符,可以使用引號(hào)來規(guī)避可能的錯(cuò)誤。

轉(zhuǎn)載自http://www.linuxidc.com/Linux/2015-08/121217.htm

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容