天天看點

62、shell轉義,單引号與雙引号,反撇号

1、轉義

    單引号和雙引号都能關閉shell對特殊字元的處理。不同的是,雙引号沒有單引号嚴格,單引号關閉所有有特殊作用的字元,而雙引号隻要求shell忽略大多數,具體的說,就是①美元符号②反撇号③反斜杠,這3種特殊字元不被忽略;不忽略美元符号意味着shell在雙引号内部也進行變量名替換。

1)單引号

硬轉義,單引号内的字元就是其字面意義。阻止shell進行變量替換和解釋特殊字元;對于後一種情況,單引号就是個轉義字元,類似于反斜線。

2)雙引号

會進行變量替換;将整個字元串解釋為一個整體,即使參數裡面含有空白字元也不會被shell分割開

3)反撇号,相當于$()--指令替換

會把指令執行的輸出,替換;相當于函數調用,嵌套的變量會一直解析

① 把shell指令用反引号或者$(...)結構括起來,其中,$(...)格式受到POSIX标準支援,也利于嵌套

② 反撇号内不能再引用反撇号,而$()中可以引用反撇号

③ 要把$()引用指令與${}引用變量區分開來

4)反斜線

用作轉義字元,阻止shell将後續字元解釋成特殊字元

2、示例

1)****/home/edwardlewis/altraman # echo 'date'

date

****:/home/edwardlewis/altraman # echo "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"

3、其他[3]

1)command line的每一個charactor,分為如下兩種:

*literal:普通純文字,對shell 來說沒特殊功能

*meta:對shell來說,具有特定功能的特殊保留字元

① IFS:由<space>或<tab>或<enter>三者之一組成,用來拆解 command line的每一個詞(word),因為command line 是按詞來處理的。

② CR:由<enter>産生。CR 用來結束 command line

③ =:設定變量。

④ $:作變量或運算替換

⑤ >:重導向 stdout

⑥ <:重導向 stdin

⑦ |:管道

⑧ &:背景運作。

⑨ ():将其内的指令置于 嵌套子shell中執行,或用于運算或指令替換。

⑩ {}:将其内的指令置于non-named function中執行,或用在變量替換的界定範圍

11 ;:在前一個指令結束時,忽略其傳回值,繼續執行下一個指令

12 &&:在前一個指令結束時,若傳回值為 true,繼續執行下一個指令

13 ||:在前一個指令結束時,若傳回值為false,繼續執行下一個指令。

14 !:執行 history 清單中的指令

2)假如需要在command line中将這些保留字元的功能關閉,就需要quoting處理。在bash中,常用的quoting 有三種方法:

① hard quote:' ' (單引号),在 hard quote 中的所有meta 均被關閉

② soft quote:" " (雙引号),在soft quoe 中大部份meta都會被關閉,除$,`,\。

③ escape: \(反斜線),緊接 escape之後的單一meta被關閉

參考

【2】 開頭幾句話很關鍵

<a href="http://www.xxlinux.com/linux/article/development/shell/2008-04-30/14340.html">http://www.xxlinux.com/linux/article/development/shell/2008-04-30/14340.html</a>

下一篇: 61、nohup簡介

繼續閱讀