我知道我们可以转义像*(){}$
with\
这样的特殊字符,以便将其视为文字。
例如\*
或\$
但如果.
我必须做两次,否则\\.
它被认为是特殊字符。例子:
man gcc | grep \\.
为什么会这样呢?
答案1
一般来说,您只需转义一次即可使特殊字符被视为字面意思。有时您必须执行两次,因为您的模式被多个程序使用。
让我们讨论一下你的例子:
man gcc | grep \\.
该命令由两个程序解释,即bash
解释器和grep
。第一个转义导致bash
Know\
是字面意思,因此第二个转义被传递给grep
。
如果你只转义一次,\.
,bash
就会知道这个点是字面意思,并传递.
给grep
。当grep
看到这个时.
,它认为点是特殊字符,而不是文字.
如果你逃脱两次,bash
会将模式传递\.
给grep
.现在grep
知道它是一个字面点。
答案2
为了防止 bash 尝试解释你的参数,请将它们用引号引起来
man gcc | grep "\."