【发布时间】:2013-02-07 07:49:34
【问题描述】:
我想在代码库中确认文字字符串:“$$”,但像这样转义美元符号:
ack \$\$
没用。
【问题讨论】:
-
ack '[$][$]'。字符类。比 N 次转义还干净。
我想在代码库中确认文字字符串:“$$”,但像这样转义美元符号:
ack \$\$
没用。
【问题讨论】:
ack '[$][$]' 。字符类。比 N 次转义还干净。
您可以使用三个反斜杠转义美元符号字符,如下所示:
ack "\\\$\\\$"
或使用单引号,您只需将其转义一次:
ack '\$\$'
【讨论】:
ack '\$\$\(' 应该可以正常工作。
你被 shell 引用弄糊涂了。输入时:
ack "\\\$\\\$\("
shell 插入双引号字符串,以便\\ 被转换为\,\$ 被转换为$ 并且\( 被转换为\( 并且ack 将字符串\$\$\( 转换为它的论点。通过使用单引号和调用来避免 shell 插值要简单得多:
ack '\$\$\('
将ack 替换为echo 以探索shell 如何扩展字符串。请注意,
ack "\\$\\$\("
也可以,但原因略有不同。在这里,前两个\ 被视为单个(转义)\,然后$ 被转换为$,因为它后面跟着一个不是变量名中有效字符的字符。 \( 扩展为 \( 而不是简单的 (,因为 ( 不受插值影响,因此不需要转义。但请注意,在双引号之外,\( 会转换为 (。
Shell 引用规则有时会令人困惑!
【讨论】:
您可以使用printf 为您处理引用,方法是使用%q 格式说明符。
$ printf %q '$$('
\$\$\(
help print 有以下要说的(我假设这里是 bash)`
%q quote the argument in a way that can be reused as shell input
【讨论】:
使用 ack 的-Q 进行转义。
ack -Q '$$'
【讨论】: