時間:2017.11.16
作者:李強
參考:man,info,magedu講義
聲明:以下英文純屬個人翻譯,英文B級,歡迎糾正,以下內容純屬個人理解,並沒有對錯,只是參考,盜版不糾,纔能有限,希望不誤人子弟爲好。
以下內容引用自博客園 ---刨根問底_liang
https://www.cnblogs.com/DengGao/p/6344830.html
一、單引號和雙引號
單引號和雙引號,都是爲了解決中間有空格的問題。
因爲空格在Linux中時作爲一個很典型的分隔符,比如string1=this is astring,這樣執行就會報錯。爲了避免這個問題,因此就產生了單引號和雙引號。
他們的區別在於,單引號將剝奪其中的所有字符的特殊含義,而雙引號中的'$'(參數替換)和'`'(命令替換)是例外。所以,兩者基本上沒有什麼區別,除非在內容中遇到了參數替換符$和命令替換符`。
所以下面的結果:
[lq@centos6 ~]$num=3 [lq@centos6 ~]$echo '$num' $num [lq@centos6 ~]$echo "$num" 3 [lq@centos6 ~]$echo "\"$num\"" "3" [lq@centos6 ~]$
所以,如果需要在雙引號””裏面使用這兩種符號,需要用反斜槓轉義。
二、反引號``
這個東西的用法,和$()是一樣的。在執行一條命令時,會先將 ``中的語句,或者是$() 中的語句當作命令執行一遍,再將結果加入到原命令中重新執行。
例如:echo `ls`會先執行 ls 得到xx.sh等,再替換原命令爲:echo xx.sh最後執行結果爲xx.sh那麼,平時我們遇到的把一堆命令的執行結果輸出到一個變量中,需要用這個命令替換符括起來,也就可以理解了。
echo '$(pwd)' 我們知道單引號只是將多個內容括起來輸出並不做任何解釋,結果還是$(pwd)
echo "$(pwd)",雙引號會對裏面的變量轉義字符等作出解釋,所以輸出結果就是 echo `pwd`的pwd命令的執行結果。
所以其實可以說是2種引號,單引號雙引號,反引號是‘’$(command)‘’的另一種簡化寫法罷了
[lq@centos6 ~]$echo '$(pwd)' $(pwd) [lq@centos6 ~]$echo "$(pwd)" /home/lq [lq@centos6 ~]$echo `pwd` /home/lq [lq@centos6 ~]$
ps: 個人理解:單引號和雙引號的作用就是把一些字符給當做一個字符串來一起處理,單引號會把' '裏的內容當做整體的一個string, 而雙引號""雖然把一些字符給引起來當做一個string來處理,但是string裏包含的一些對於其使用者來說有意義的特殊字符是會使用其特殊含義的,這個使用者如果不想用其特殊含義,就使用轉義字符\,或者直接使用'',但是如果string裏還有我們想要的特殊字符的特殊作用的話,就是把需要使用原意的特殊字符用轉義符號轉義,不需要的就不轉義,然後是用""引起來。
ls "(a)" 這裏對於其使用者ls來說()暫時沒特別含義就可以直接使用,或者ls '(a)' ,可以表示我們查看(a) 這個文件。
ls 'a' 如果我們這麼看只能查看a的文件,如果文件本身是 'a' ,那麼我們可以使用 ls "'a'" 來查看 'a' 文件,雙引號不解釋'',單引號不解釋"" ,是一種組合使用方法
在變量中,[ ] 可以用來判斷,如果這個時候判斷的是數字之間的判斷,那麼[ "$var" -eq 10 ] ,這個時候我們是不能對$var用雙引號引起來的,因爲引號代表這裏面的是字符串string類型的數據,是不能和10進行比較的。會出現參數錯誤。