http://www.cnblogs.com/mydomain/archive/2011/10/15/2213017.html 1、轉(zhuǎn)義 單引號和雙引號都能關(guān)閉shell對特殊字符的處理。不同的是,雙引號沒有單引號嚴(yán)格,單引號關(guān)閉所有有特殊作用的字符,而雙引號只要求shell忽略大多數(shù),具體的說,就是①美元符號②反撇號③反斜杠,這3種特殊字符不被忽略;不忽略美元符號意味著shell在雙引號內(nèi)部也進行變量名替換。 1)單引號 硬轉(zhuǎn)義,單引號內(nèi)的字符就是其字面意義。阻止shell進行變量替換和解釋特殊字符;對于后一種情況,單引號就是個轉(zhuǎn)義字符,類似于反斜線。 2)雙引號 會進行變量替換;將整個字符串解釋為一個整體,即使參數(shù)里面含有空白字符也不會被shell分割開 3)反撇號,相當(dāng)于$()--命令替換 會把命令執(zhí)行的輸出,替換;相當(dāng)于函數(shù)調(diào)用,嵌套的變量會一直解析 ① 把shell命令用反引號或者$(...)結(jié)構(gòu)括起來,其中,$(...)格式受到POSIX標(biāo)準(zhǔn)支持,也利于嵌套 ② 反撇號內(nèi)不能再引用反撇號,而$()中可以引用反撇號 ③ 要把$()引用命令與${}引用變量區(qū)分開來 4)反斜線 用作轉(zhuǎn)義字符,阻止shell將后續(xù)字符解釋成特殊字符 2、示例 1)****/home/edwardlewis/altraman # echo 'date' date ****:/home/edwardlewis/altraman # echo "date" date ****:/home/edwardlewis/altraman # echo `date` Fri Aug 19 07:00:02 CST 2011 2)在腳本中: a)newname=1.log_`date +%Y-%m-%d-%H-%M` 會輸出:1.log_2011-10-13-21-27 b)tme=move_data.log_'date +%Y-%m-%d-%H-%M' echo ${tme} 輸出為:1.log_date +%Y-%m-%d-%H-%M c)tme=move_data.log_"date +%Y-%m-%d-%H-%M" echo ${tme} 輸出為:1.log_date +%Y-%m-%d-%H-%M 3、其他[3] 1)command line的每一個charactor,分為如下兩種: *literal:普通純文字,對shell 來說沒特殊功能 *meta:對shell來說,具有特定功能的特殊保留字符 ① IFS:由<space>或<tab>或<enter>三者之一組成,用來拆解 command line的每一個詞(word),因為command line 是按詞來處理的。 ② CR:由<enter>產(chǎn)生。CR 用來結(jié)束 command line ③ =:設(shè)定變量。 ④ $:作變量或運算替換 ⑤ >:重導(dǎo)向 stdout ⑥ <:重導(dǎo)向 stdin ⑦ |:管道 ⑧ &:后臺運行。 ⑨ ():將其內(nèi)的命令置于 嵌套子shell中執(zhí)行,或用于運算或命令替換。 ⑩ {}:將其內(nèi)的命令置于non-named function中執(zhí)行,或用在變量替換的界定范圍 11 ;:在前一個命令結(jié)束時,忽略其返回值,繼續(xù)執(zhí)行下一個命令 12 &&:在前一個命令結(jié)束時,若返回值為 true,繼續(xù)執(zhí)行下一個命令 13 ||:在前一個命令結(jié)束時,若返回值為false,繼續(xù)執(zhí)行下一個命令。 14 !:執(zhí)行 history 列表中的命令 2)假如需要在command line中將這些保留字符的功能關(guān)閉,就需要quoting處理。在bash中,常用的quoting 有三種方法: ① hard quote:' ' (單引號),在 hard quote 中的所有meta 均被關(guān)閉 ② soft quote:" " (雙引號),在soft quoe 中大部份meta都會被關(guān)閉,除$,`,\。 ③ escape: \(反斜線),緊接 escape之后的單一meta被關(guān)閉 |
|