分页: 1 / 1

求助?关于shell中单引号的用法一疑问

发表于 : 2012-03-01 19:17
fz420
图片

图片


请问下大家为什么 grep 里的 斜杠 可以用来转义???

redhat的文档是说“单引号”可以防止所有扩展,我的理解是:对于单引号来说,相当于可以转义单引号范围内的所有特殊字符才对吧??

Re: 求助?关于shell中单引号的用法一疑问

发表于 : 2012-03-01 20:54
fz420
找到答案了,给兄弟们补上

这个和grep本省没有关系,而是和shell有关系,
比如:

grep "\\" file 这个为什么会失败呢?
因为用双引号,shell先把\\转义,就成了\,grep接收到的只有\,\是特殊字符,后面应该跟需要转义的字符,所以只有一个\就出错了。

如果用双引号,查找一个\,就应该用四个\:
grep "\\\\" file 这样就对了,这样等同于:
grep '\\' file

第一条命令shell把四个\,转义成2个\传递给grep,grep再把2个\转义成一个\查找
第二条命令shell没转义,直接把2个\传递给grep,grep再把2个\转义成一个\查找
其实grep执行的是相同的命令

Re: 求助?关于shell中单引号的用法一疑问

发表于 : 2012-03-02 0:25
zcf115
:em04
grep '\\' file 。这个省事。

Re: 求助?关于shell中单引号的用法一疑问

发表于 : 2012-03-02 0:29
枫叶饭团
还好python有r :em05

Re: 求助?关于shell中单引号的用法一疑问

发表于 : 2012-03-02 8:29
tosail2010
fz420 写了:找到答案了,给兄弟们补上

这个和grep本省没有关系,而是和shell有关系,
比如:

grep "\\" file 这个为什么会失败呢?
因为用双引号,shell先把\\转义,就成了\,grep接收到的只有\,\是特殊字符,后面应该跟需要转义的字符,所以只有一个\就出错了。

如果用双引号,查找一个\,就应该用四个\:
grep "\\\\" file 这样就对了,这样等同于:
grep '\\' file

第一条命令shell把四个\,转义成2个\传递给grep,grep再把2个\转义成一个\查找
第二条命令shell没转义,直接把2个\传递给grep,grep再把2个\转义成一个\查找
其实grep执行的是相同的命令

2个命令的共同点:grep再把2个\转义成一个\查找

不同点:单引号和双引号在使用上的区别;单引号中字符串就是一串普通字符串,而双引号则不是,有特殊字符的说法,其中\ (backslash) 就是一个。

Re: 求助?关于shell中单引号的用法一疑问

发表于 : 2012-03-02 8:40
自由建客
剥洋葱一样,关键是要明白是谁在剥,剥到最后那个要剥的人还有没有得剥。

Re: 求助?关于shell中单引号的用法一疑问

发表于 : 2012-03-02 20:48
fz420
自由建客 写了:剥洋葱一样,关键是要明白是谁在剥,剥到最后那个要剥的人还有没有得剥。

:em04 很有道理啊!我最开始没有搞明白的,就是不理解有“剥”这个动作,以为只是简单的原样传递……