Você deve citar o caractere $
quando ele for para si mesmo dentro de uma string em doublequotes; caso contrário, o shell pensará que ele introduz uma expansão de variável e ficará infeliz se o caractere após ele não for alfabético ou uma das variáveis especiais.
sed -i "s/cb $i\$/cb $i $cb/" */callback_events
Existem dois níveis de interpretação de caracteres aqui.
-
Primeiro, o shell lê o comando e aplica suas regras. Uma das regras é que dentro de doublequotes
$
introduz expansão de variáveis, a menos que seja citada. -
Depois que o shell terminar, o comando ficará assim:
sed -i s/cd <value-of-i>$/cd <value-of-i> <value-of-cb/ dir1/callback_events dir2/callback_events...
Observe que as aspas desapareceram,
$i
e$cb
foram substituídas por seus valores e\$
se tornou apenas$
. Também*/callback_events
foi substituído por uma lista de arquivos. -
Isso é passado para
sed
, que aplica as regras its . Uma dessas regras é que$
no final do padrão de pesquisa significa fim de linha.