2013-02-21 118 views

回答

15

你越来越糊涂通过shell引用。如果键入:

ack "\\\$\\\$\(" 

外壳内插双引号字符串,以便\\被翻译成\\$被翻译成$\(转换为\(和ACK获取字符串\$\$\(作为其参数。这是更简单的使用单引号,以避免外壳插值和调用:

ack '\$\$\(' 

更换ackecho探索外壳是如何膨胀的字符串。请注意,

ack "\\$\\$\(" 

也将工作,但原因稍有不同。此处,前两个\被视为单个(逸出)\,那么因为它后面跟着一个字符不是在变量名的有效字符的$被翻译成一个$\(扩展到\(而不是简单地(因为(不受插值,因此并不需要进行转义。但需要注意的双引号可外,\(转化为(

壳牌引用规则会比较混乱,有时!

+1

是啊我得到轻松shell引用规则困惑 - 回声技巧是一个!好主意,但感谢分享 – 2013-02-21 21:09:11

0

您可以用三个反斜杠逃逸美元符号,就像这样:

ack "\\\$\\\$" 

,或者使用单引号,在这里你只需要一次逃吧:

ack '\$\$' 
+3

它更容易使用单引号:'ACK“\ $ \ $ \(”'应该工作得很好 – 2013-02-21 20:39:47

+0

是啊,这是好多了 - 谢谢 – 2013-02-21 20:45:12

0

通过使用%q格式说明符,您可以使用printf负责引用。

$ printf %q '$$(' 
\$\$\(

help print(在这里我假设bash)的有下面要说'

%q quote the argument in a way that can be reused as shell input 
15

使用ACK的-Q做你的转义。

ack -Q '$$' 
+0

真棒,谢谢! – blushrt 2015-06-25 00:57:25