如何使用ack搜索(转义)美元符号?

Chr*_*ott 5 regex unix perl ack

我想$$在代码库中找到文字字符串:" ",但是像这样转义美元符号:

ack \$\$
Run Code Online (Sandbox Code Playgroud)

不起作用.

Wil*_*ell 16

shell引用让你感到困惑.键入时:

ack "\\\$\\\$\("
Run Code Online (Sandbox Code Playgroud)

shell插入双引号字符串,以便将\\其转换为\,\$转换为$\(转换为,\(并且ack将字符串\$\$\(作为其参数.通过使用单引号和调用来避免shell插值要简单得多:

ack '\$\$\('
Run Code Online (Sandbox Code Playgroud)

替换ackecho探索外壳是如何膨胀的字符串.注意

ack "\\$\\$\("
Run Code Online (Sandbox Code Playgroud)

也会工作,但原因略有不同.这里,前两个\被视为单个(转义)\,然后$被转换为a,$因为它后跟一个不是变量名中有效字符的字符. \(扩展到\(而不是简单(因为(不受插值,因此不需要转义.但请注意,在双引号之外,\(转换为(.

Shell引用规则有时会让人感到困惑!


And*_*ter 16

使用ack -Q来逃避.

ack -Q '$$'
Run Code Online (Sandbox Code Playgroud)