'\' barra invertida entre aspas simples, dando saída imprevisível no script de shell linux

0

a saída dos dois comandos a seguir é a mesma:

echo 'my\name' | grep 'my\name'
my\name

e também a saída para o próximo comando também é a mesma,

echo 'my\name' | grep 'my\\name'
my\name

Alguém pode pls guia porque isso está resultando na mesma saída? Por que uma barra invertida extra também não afeta nenhuma alteração na saída?

no entanto, se aumentarmos o número de barras invertidas para quatro no grep, a saída irá embora,

echo 'my\name' | grep 'my\\name'

sem saída

Pls me guia com o comportamento de grep e backslash em aspas simples e duplas.

    
por frp farhan 11.04.2016 / 11:24

1 resposta

0

O uso de uma barra invertida em uma expressão regular (como no grep) é diferente de como um shell pode interpretá-la. Um shell pode olhar para \n e sem aspas, converter para um retorno de carro. Em uma expressão regular, um \ significa "não interprete o próximo caractere como caractere regex especial, trate-o como um caractere literal".

Neste exemplo

'my\\name'

Você está dizendo:

Encontre "my" seguido por um literal "\" (o \ ), seguido por um literal "n" (o \n ).

Então, isso correspondeu a my\name

O próximo exemplo:

'my\\name'

Você está dizendo:

Encontre "my" seguido por um literal "\" (o \ ), seguido por outro literal "\" (o \ ).

Portanto, isso não corresponde a my\name .

    
por 11.04.2016 / 11:31