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),會同時支持單字符選項及對應的多字符選項。

 

在bash中,*、?、[、]有特殊的含義,用於字符匹配。*代表0到多個字符,?代表單個字符。[]用於匹配單個字符,內部用短橫線按照ASCII碼順序標明匹配的字符范圍,或者枚舉所有要匹配的字符。

在編寫shell腳本時對於引號的應用也是十分重要的,這里總結一下三種引號的特點。

1、單引號(‘’),被單引號包裹的內容會將其視為字符串,即使做了像 \n  這樣的換行,也會照樣輸出 \n 而不是 換行。
 
2、雙引號(“”),和單引號不同的是,雙引號會將包裹內容的轉義字符輸出。下面做一個例子:
[javascript] 
$ name=kehr  
$ echo "$name"  
kehr  
$ echo '$name'  
$name  
明顯可以看出二者的差別
 
3、小引號(``)這個符號也不知道學名叫什么,我管它叫“小引號”,哈哈。
它的作用是,被小引號包裹的內容會先執行。
 
例如,當我們在安裝內核devel等文件的時候會用到下面的命令:
[html] 
yum install kernel-devel-`uname -r`  
 
這里的小引號就是鍵盤數字1,左邊的那個鍵。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM