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.