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