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

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
fz420
帖子: 127
注册时间: 2007-06-18 5:23
来自: http://china.com

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

#1

帖子 fz420 » 2012-03-01 19:17

图片

图片


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

redhat的文档是说“单引号”可以防止所有扩展,我的理解是:对于单引号来说,相当于可以转义单引号范围内的所有特殊字符才对吧??
头像
fz420
帖子: 127
注册时间: 2007-06-18 5:23
来自: http://china.com

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

#2

帖子 fz420 » 2012-03-01 20:54

找到答案了,给兄弟们补上

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

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

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

第一条命令shell把四个\,转义成2个\传递给grep,grep再把2个\转义成一个\查找
第二条命令shell没转义,直接把2个\传递给grep,grep再把2个\转义成一个\查找
其实grep执行的是相同的命令
zcf115
帖子: 398
注册时间: 2009-06-28 10:06
系统: ubuntu12.04

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

#3

帖子 zcf115 » 2012-03-02 0:25

:em04
grep '\\' file 。这个省事。
Still Alive
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

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

#4

帖子 枫叶饭团 » 2012-03-02 0:29

还好python有r :em05
头像
tosail2010
帖子: 83
注册时间: 2011-03-27 19:01
联系:

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

#5

帖子 tosail2010 » 2012-03-02 8:29

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) 就是一个。
A year's plan starts with spring.
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

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

#6

帖子 自由建客 » 2012-03-02 8:40

剥洋葱一样,关键是要明白是谁在剥,剥到最后那个要剥的人还有没有得剥。
头像
fz420
帖子: 127
注册时间: 2007-06-18 5:23
来自: http://china.com

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

#7

帖子 fz420 » 2012-03-02 20:48

自由建客 写了:剥洋葱一样,关键是要明白是谁在剥,剥到最后那个要剥的人还有没有得剥。

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