我想$$在代码库中确认文字字符串:“”,但像这样转义美元符号:
ack \$\$
不起作用。
您对 shell 引用感到困惑。当您键入:
ack "\\\$\\\$\("
shell 对双引号字符串进行插值,以便\\转换为\、\$转换为$并\(转换为\(ack 获取字符串\$\$\(作为其参数。通过使用单引号和调用来避免 shell 插值要简单得多:
ack '\$\$\('
替换ack为echo探索外壳如何扩展字符串。注意
ack "\\$\\$\("
也可以,但原因略有不同。在这里,前两个\被视为单个(转义)\,然后$被翻译为 a $,因为它后面跟着一个不是变量名中有效字符的字符。 \(扩展为\(而不是仅仅(因为(不受插值影响,因此不需要转义。但请注意,在双引号之外,\(将转换为(.
Shell 引用规则有时会令人困惑!
使用 ack's-Q进行转义。
ack -Q '$$'
您可以使用三个反斜杠转义美元符号字符,如下所示:
ack "\\\$\\\$"
或使用单引号,您只需将其转义一次:
ack '\$\$'
您可以使用格式说明符printf为您处理引用。%q
$ printf %q '$$('
\$\$\(
help print有以下要说的(我假设这里是 bash)`
%q quote the argument in a way that can be reused as shell input