在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,左邊的那個鍵。
人就像是被蒙着眼推磨的驢子,生活就像一條鞭子;當鞭子抽到你背上時,你就隻能一直往前走,雖然連你也不知道要走到什麼時候為止,便一直這麼堅持着。