Regex 如何使用ack搜索(转义)美元符号?
我想确认代码基中的文字字符串:“Regex 如何使用ack搜索(转义)美元符号?,regex,perl,unix,ack,Regex,Perl,Unix,Ack,我想确认代码基中的文字字符串:“$$”,但要像这样转义美元符号: ack \$\$ 不起作用。可以用三个反斜杠转义美元符号字符,如下所示: ack "\\\$\\\$" 或者使用单引号,只需转义一次: ack '\$\$' 你被壳牌的报价弄糊涂了。键入时: ack "\\\$\\\$\(" shell插入双引号字符串,以便将\\转换为\,\$转换为$,\(转换为\(,ack获取字符串\$\$\(作为其参数。使用单引号和invoke避免shell插值要简单得多: ack '\$\$\('
$$
”,但要像这样转义美元符号:
ack \$\$
不起作用。可以用三个反斜杠转义美元符号字符,如下所示:
ack "\\\$\\\$"
或者使用单引号,只需转义一次:
ack '\$\$'
你被壳牌的报价弄糊涂了。键入时:
ack "\\\$\\\$\("
shell插入双引号字符串,以便将\\
转换为\
,\$
转换为$
,\(
转换为\(
,ack获取字符串\$\$\(
作为其参数。使用单引号和invoke避免shell插值要简单得多:
ack '\$\$\('
将ack
替换为echo
,以探索shell如何扩展字符串。请注意
ack "\\$\\$\("
也会起作用,但原因稍有不同。在这里,前两个\
被视为单个(转义)\
,然后$
被翻译为$
,因为它后面的字符在变量名中不是有效字符。\(
扩展为\(
而不是简单的(
),因为(
不受插值影响,因此不需要转义。但请注意,在双引号之外,\(
转换为(
)
Shell引用规则有时会令人困惑!您可以使用
printf
通过使用%q
格式说明符来处理引用
$ printf %q '$$('
\$\$\(
help print
有以下几点要说(我假设这里是bash)`
使用ack的
-Q
进行转义
ack -Q '$$'
使用单引号要容易得多:
ack'\$\$\('
应该可以很好地工作。是的,我很容易被shell引用规则搞糊涂了-不过回音技巧是个好主意,谢谢你分享ack'[$][$]'
。字符类。比N转义更干净。
ack -Q '$$'