1

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

splCharCheck='egrep "&|\"|:|\'" | wc -l'

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

谁能帮我在这里转义单引号?

4

3 回答 3

0

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

在 bash 中,您可以轻松地使用转义文本

printf "%q\n" "$Name"

例如:

$ Name="Some 'intricate' value"
$ printf "%q\n" "$Name"
Some\ \'intricate\'\ value
于 2012-10-29T17:41:19.503 回答
0

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

splCharCheck='egrep "&|\"|:|'\''" | wc -l'

但是,我必须同意@sehe 的观点,您似乎正在尝试解决错误的问题。你为什么把这个命令放在一个变量中而不是直接执行它?这通常是一个坏主意eval只会增加更多让事情变得奇怪的机会)。而且,进一步备份,您真正想要做什么?

ps 如果你必须使用eval,至少双引号你正在评估的字符串。不这样做可能会导致一些严重难以理解的错误。最后,我建议使用$( )而不是反引号,因为它的解析异常更少:

count=$(echo  "$Name" | eval "$splCharCheck")
于 2012-10-30T00:34:22.283 回答
0

不要“逃避”单引号。检查以下:

# cat test
'name with quotes'
no quotes

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

# cat test | egrep "\'"
'name with quotes'
no quotes
于 2012-10-29T16:54:46.040 回答