Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何使用ack搜索(转义)美元符号?_Regex_Perl_Unix_Ack - Fatal编程技术网

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 '$$'