天天看點

Shell中的單引号(‘)雙引号(”)和反引号(·)

在bash中,$、*、?、[、]、’、”、`、\、有特殊的含義。類似于編譯器的預編譯過程,bash在掃描指令行的過程中,會在文本層次上,優先解釋所有的特殊字元,之後對轉換完成的新指令行,進行核心的系統調用。

其中,反引号類似于函數調用,而不僅僅是簡單的文本替換及比對。

指令行中,被單引号引用的部分,其中所有的特殊字元按照普通字元解釋;

雙引号引用的部分,僅解釋$(美元符号)、\(\n \t除外)、`(反引号),解釋後的文本僅按照普通文字處理(同單引号)。

反引号相當于指令替換,引用的部分優先執行,将運作結果替換到外層的指令行文本中;反引号可以嵌套,但是嵌套時内部的反引号必須用\轉義

反斜杠用于指令換行,以及echo -e解釋。

網上各種文章常見的例子,其中第二行重點介紹一下:

# x=*                     

# echo $x      此行執行了兩次替換,将$x替換為*,之後将*替換為目前目錄下所有檔案清單的文本,

          該文本作為參數賦給echo(bash會自動按照優先級,進行多層次替換 )

hello.sh menus.sh misc.sh phonebook tshift.sh

# echo '$x'               $x不進行任何解釋,直接将文本‘$x’作為參數賦給echo

$x

# echo "$x"              $x替換為*,但是由于在雙引号内,*不做替換,是以文本“*”将作為參數賦給echo

Tips:

大多數Linux Distribution的預設shell為bash,查詢目前主機所有shell可執行如下指令:

$ cat  /etc/shell

bash内部內建了40多條指令,通用格式為:

$ 指令 [-選項] [參數]

其中,”-“後為單字元選項,"--"後為完整的單詞選項。一般來說,指令的某項功能(feature),會同時支援單字元選項及對應的多字元選項。

1、單引号(‘’),被單引号包裹的内容會将其視為字元串,即使做了像 \n  這樣的換行,也會照樣輸出 \n 而不是 換行。

2、雙引号(“”),和單引号不同的是,雙引号會将包裹内容的轉義字元輸出。下面做一個例子:

[javascript] 

$ name=kehr  

$ echo "$name"  

kehr  

$ echo '$name'  

$name  

明顯可以看出二者的差别

3、小引号(``)這個符号也不知道學名叫什麼,我管它叫“小引号”,哈哈。

它的作用是,被小引号包裹的内容會先執行。

例如,當我們在安裝核心devel等檔案的時候會用到下面的指令:

[html] 

yum install kernel-devel-`uname -r`  

這裡的小引号就是鍵盤數字1,左邊的那個鍵。

人就像是被蒙着眼推磨的驢子,生活就像一條鞭子;當鞭子抽到你背上時,你就隻能一直往前走,雖然連你也不知道要走到什麼時候為止,便一直這麼堅持着。