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)
替换ack
与echo
探索外壳是如何膨胀的字符串.注意
ack "\\$\\$\("
Run Code Online (Sandbox Code Playgroud)
也会工作,但原因略有不同.这里,前两个\
被视为单个(转义)\
,然后$
被转换为a,$
因为它后跟一个不是变量名中有效字符的字符. \(
扩展到\(
而不是简单(
因为(
不受插值,因此不需要转义.但请注意,在双引号之外,\(
转换为(
.
Shell引用规则有时会让人感到困惑!