簡要總結:linux
單引號:
能夠說是所見即所得:即將單引號內的內容原樣輸出,或者描述爲單引號裏面看到的是什麼就會輸出什麼。
雙引號:
把雙引號內的內容輸出出來;若是內容中有命令、變量等,會先把變量、命令解析出結果,而後在輸出最終內容來。ide
不加引號:
不會將含有空格的字符串視爲一個總體輸出, 若是內容中有命令、變量等,會先把變量、命令解析出結果,而後在輸出最終內容來,若是字符串中帶有空格等特殊字符,則不能完整的輸出,須要改加雙引號,通常連續的字符串,數字,路徑等能夠用。spa
實例演示:
例1:
[root@oldboy oldboy]# echo '`date`'
#→單引號時看到啥就顯示啥
`date`
[root@oldboy oldboy]# echo "`date`"
#→雙引號時若是裏面是變量,會先把變量解析成具體內容在顯示
Sat Oct 29 18:02:59 CST 2011
[root@oldboy oldboy]# echo `date`
#→對於連續的字符串等內容通常不加引號也可,加雙引號通常比較保險,推薦
Sat Oct 29 18:03:08 CST 2011
例2:
[root@oldboy ~]# oldboy=testchars #→建立一個變量
[root@oldboy ~]# echo $oldboy #→不加引號,顯示一個變量解析後的內容
testchars
[root@oldboy ~]# echo '$oldboy' #→單引號,顯示一個變量自己
$oldboy
[root@oldboy ~]# echo "$oldboy" #→雙引號,顯示一個變量內容,引號內能夠是變量、字符串等
testchars
過濾字符串測試:
[root@oldboy ~]# cat >grep.log
testchars
oldboy
[root@oldboy ~]# cat grep.log
testchars
oldboy
[root@oldboy ~]# grep "$oldboy" grep.log
testchars
[root@oldboy ~]# grep '$oldboy' grep.log
[root@oldboy ~]# grep $oldboy grep.log
testchars
[ett@oldboy ~]$ cat >oldboy.log
\"
[ett@oldboy ~]$ cat oldboy.log
\"
[ett@oldboy ~]$ grep '\"' oldboy.log
\"
提示:有關單引號和雙引號的區別詳細內容請參考《老男孩linux運維實戰培訓-shell編程精講》
拓展:awk調用shell變量問題
[ett@oldboy ~]$ ett=123
[ett@oldboy ~]$ awk 'BEGIN {print '$ett'}'
123
[ett@oldboy ~]$ awk 'BEGIN {print "$ett"}'
$ett
[ett@oldboy ~]$ ett='abc'
[ett@oldboy ~]$ awk 'BEGIN {print "$ett"}'
$ett
[ett@oldboy ~]$ awk 'BEGIN {print '$ett'}'
[ett@oldboy ~]$ awk 'BEGIN {print "'$ett'"}'
abc
提示:awk調用shell變量在http://oldboy.blog.51cto.com/2561410/760192一文有體現。