Geralmente, você só precisa escapar uma vez para tornar um caractere especial considerado literal. Às vezes você tem que fazer isso duas vezes, porque seu padrão é usado por mais de um programa.
Vamos dissociar o seu exemplo:
man gcc | grep \.
Este comando é interpretado por dois programas, bash
intérprete e grep
. O primeiro escape faz com que bash
knows \
seja literal, então o segundo é passar por grep
.
Se você escapar apenas uma vez, \.
, bash
saberá que esse ponto é literal e passará .
para grep
. Quando grep
vê isso .
, ele acha que o ponto é um caractere especial, não literal .
Se você escapar duas vezes, bash
passará o padrão \.
para grep
. Agora, grep
sabe que é um ponto literal.