Por que eu tenho que escapar de um "ponto" duas vezes?

12

Eu sei que podemos escapar de um caractere especial como *(){}$ com \ para ser considerado literal.
Por exemplo, \* ou \$

Mas no caso de . eu tenho que fazer duas vezes, como \. caso contrário, é considerado um caracter especial. Exemplo:

man gcc | grep \.

Por que isso acontece?

    
por Registered User 16.07.2014 / 08:26

1 resposta

23

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.

    
por 16.07.2014 / 08:39