为什么我必须两次转义“点”?

为什么我必须两次转义“点”?

我知道我们可以转义像*(){}$with\这样的特殊字符,以便将其视为文字。
例如\*\$

但如果.我必须做两次,否则\\.它被认为是特殊字符。例子:

man gcc | grep \\.

为什么会这样呢?

答案1

一般来说,您只需转义一次即可使特殊字符被视为字面意思。有时您必须执行两次,因为您的模式被多个程序使用。

让我们讨论一下你的例子:

man gcc | grep \\.

该命令由两个程序解释,即bash解释器和grep。第一个转义导致bashKnow\是字面意思,因此第二个转义被传递给grep

如果你只转义一次,\.bash就会知道这个点是字面意思,并传递.grep。当grep看到这个时.,它认为点是特殊字符,而不是文字.

如果你逃脱两次,bash会将模式传递\.grep.现在grep知道它是一个字面点。

答案2

为了防止 bash 尝试解释你的参数,请将它们用引号引起来

man gcc | grep "\."

相关内容