转自 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个\传递给grep,grep再把2个\转义成一个\查找
第二条命令shell没转义,直接把2个\传递给grep,grep再把2个\转义成一个\查找
其实grep执行的是相同的命令