grep 後加單引號、雙引號和不加引號的區別

轉自 http://blog.csdn.net/cupidove/article/details/8783968 這個做者也是轉的,並且沒有寫出處 ~~shell

問題直達:好比文本 abc.txt 裏的內容是 abc\":123ide

那麼grep的時候應該 cat abc.txt | grep 'abc\\\":123'spa


單引號:.net

 

能夠說是所見即所得:即將單引號內的內容原樣輸出,或者描述爲單引號裏面看到的是什麼就會輸出什麼。單引號''是全引用,被單引號括起的內容無論是常量仍是變量者不會發生替換。orm

 

雙引號:blog

 

把雙引號內的內容輸出出來;若是內容中有命令、變量等,會先把變量、命令解析出結果,而後在輸出最終內容來。雙引號""是部分引用,被雙引號括起的內容常量仍是常量,變量則會發生替換,替換成變量內容。字符串

 

不加引號:get

 

不會將含有空格的字符串視爲一個總體輸出若是內容中有命令、變量等,會先把變量、命令解析出結果,而後在輸出最終內容來,若是字符串中帶有空格等特殊字符,則不能完整的輸出,須要改加雙引號,通常連續的字符串,數字,路徑等能夠用。it

 

使用規則:class

 

通常常量用單引號''括起,若是含有變量則用雙引號""括起。

 

最大不一樣:

 

單引號與雙引號的最大不一樣在於雙引號仍然能夠保有變數的內容,但單引號內僅能是通常字

元,而不會有特殊符號

 

使用舉例:

 

「」號裏面遇到$\等特殊字符會進行相應的變量替換

‘’號裏面的全部字符都保持原樣

對於字符串,二者相同

匹配模式也大體相同

但有一些區別很是容易混淆

 

grep "$a" file        #引用變量a,查找變量a的值

 

grep '$a' file        #查找「$a」字符串

 

grep "\\" file        #grep: Trailing backslash(不知緣由)

 

grep '\\' file        #查找‘\’字符

 

1美圓符

 

2反斜槓

 

3反引號

 

4" 雙引號

這四個字符在雙引號中是具備特殊含義的,其餘都沒有,而單引號使全部字符都失去特殊含義

 

若是用雙引號,查找一個\,就應該用四個\:

grep "\\\\" file 這樣就對了,這樣等同於:

grep '\\' file

 

第一條命令shell把四個\,轉義成2\傳遞給grepgrep再把2\轉義成一個\查找

第二條命令shell沒轉義,直接把2\傳遞給grepgrep再把2\轉義成一個\查找

其實grep執行的是相同的命令

相關文章
相關標籤/搜索