首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在shell脚本中使用egrep时,使用单引号

在shell脚本中使用egrep时,使用单引号
EN

Stack Overflow用户
提问于 2012-10-30 00:48:23
回答 3查看 917关注 0票数 1

我需要在给定的输入字符串中查找一些特殊字符。如果字符串包含以下特殊字符,它应该找出。我正在做egrep来寻找角色。我的代码适用于每个字符,但不适用于单引号。请找到我的代码片段。

代码语言:javascript
运行
复制
splCharCheck='egrep "&|\"|:|\'" | wc -l'

count=`echo  "$Name" | eval $splCharCheck`

有人能帮我转义这里的单引号吗?

EN

回答 3

Stack Overflow用户

发布于 2012-10-30 00:54:46

不要“转义”单引号。请查看以下内容:

代码语言:javascript
运行
复制
# cat test
'name with quotes'
no quotes

# cat test | egrep "'"
'name with quotes'

# cat test | egrep "\'"
'name with quotes'
no quotes
票数 0
EN

Stack Overflow用户

发布于 2012-10-30 01:41:20

你想要达到什么目的?这闻起来像是XY问题。

在bash中,您可以使用以下命令轻松转义文本

代码语言:javascript
运行
复制
printf "%q\n" "$Name"

例如:

代码语言:javascript
运行
复制
$ Name="Some 'intricate' value"
$ printf "%q\n" "$Name"
Some\ \'intricate\'\ value
票数 0
EN

Stack Overflow用户

发布于 2012-10-30 08:34:22

您正在尝试将单引号嵌入到双引号字符串中,而双引号字符串则位于单引号字符串中。问题是,在单引号字符串中,双引号没有被视为任何特殊的东西,因此中间的单引号被视为单引号字符串的末尾,而不是它的一部分。为此,您需要结束单引号字符串('egrep "&|\"|:|'),以其他方式转义单引号( \'"'"),然后用您想要的其余部分('" | wc -l')开始一个新的单引号字符串。最终结果:

代码语言:javascript
运行
复制
splCharCheck='egrep "&|\"|:|'\''" | wc -l'

然而,我不得不同意@sehe的观点,看起来你似乎是在试图解决错误的问题。为什么要把这个命令放在一个变量中,而不是直接执行它?这就是generally a bad idea ( eval只是增加了更多让事情变得奇怪的机会)。再往后看,你真正想做的是什么?

附注:如果你必须使用eval,至少要用双引号将你求值的字符串引起来。如果不这样做,可能会导致一些严重的无法理解的错误。最后,我建议使用$( )而不是反引号,因为它的解析奇特之处较少:

代码语言:javascript
运行
复制
count=$(echo  "$Name" | eval "$splCharCheck")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13126063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档