我想$$
在代码库中确认文字字符串:“”,但像这样转义美元符号:
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