Uso de \ $ no final do nome da variável passado para o grep

1

Eu estava passando por um dos scripts de shell e encontrei uma linha:

ls $dir | grep -c "$NAME.${var}\$"

Entendo que $ expandiria as variáveis NAME e var , mas será necessário colocar \$ no final?

    
por Bhagyesh Dudhediya 10.12.2015 / 05:34

2 respostas

2

grep usa a string "$NAME.${var}\$" como expressão regular. Presumivelmente, antes de sua linha de código preocupante, as variáveis de shell name e var tinham valores designados, para que o shell interpretasse seus valores de script para $NAME e ${var} . Como o "$" final da expressão regular é escapado com uma barra invertida, o shell que interpreta seu script não tenta interpolar o valor de uma variável do shell. O "$" é passado para grep como parte da expressão regular. E, de fato, "$" tem um significado especial para grep no contexto de uma expressão regular. "$" significa "fim de linha" para grep . Nada além da semântica do que você usa grep exige o "$" final.

    
por 10.12.2015 / 06:03
0

Então, aqui estão as descobertas: Suponha que eu crie arquivos em um diretório, digamos: john, alex_john, alex_john1 e john1 e executo o seguinte:

[root@localhost ~]# ls | grep "john"
john
alex_john
alex_john1
john1
[root@localhost ~]# ls | grep "john\$"   <==here it would insert end of line
john
alex_john
[root@localhost ~]#  

Então, para o segundo grep, somente os arquivos que terminam com john serão impressos.

    
por 10.12.2015 / 09:41