No seu primeiro comando, você está citando a variável.
A string passada como o segundo argumento de linha de comando para sed
tem aspas duplas em torno dele, e a variável está dentro dessas citações e será expandida pelo shell.
O segundo comando não funcionará (como esperado), como você apontou, porque o shell não expande o valor da variável, uma vez que é citado usando aspas simples. Ainda vai fazer alguma coisa embora. Ele excluirá qualquer linha de entrada contendo a string literal "$MY_VAR"
(incluindo as aspas).
O primeiro comando está correto, mas você terá problemas se $MY_VAR
contiver barras. Em caso afirmativo, escolha um delimitador para o padrão sed
que não ocorre em $MY_VAR
:
sed "\@$MY_VAR@d"
Uma variável é citada quando aparece entre aspas. A variável não precisa ser "bem citada" para ser citada . Ou seja, dentro da string "hello $world!"
, a variável $world
é citada mesmo que não apareça como "$world"
.
O que importa é que a string como um todo seja citada. Se forem usadas aspas duplas, o shell expandirá quaisquer variáveis dentro dele.
No exemplo acima, a string "\@$MY_VAR@d"
é citada, e a variável $MY_VAR
está dentro dela, assim também é citada (já que está dentro da string citada).