$ cat input
#DAEMON_CONF=""
$ key=DAEMON_CONF
$ value="/etc/hostapd/hostapd.conf"
$ sed "/^$key/ { s/^#//; s%=.*%=\"$value\"%; }" input
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Duas coisas aqui. Primeiro, para expandir as variáveis do shell, você precisa colocá-las entre aspas duplas, não entre aspas simples. Dois, você precisa agrupar as substituições para que ambas dependam da correspondência de padrões. (Ou duplique a correspondência de padrões antes de cada s///
.) Três, como a substituição contém barras, é melhor usarmos outro caractere como separador para s
, como o sinal de porcentagem aqui.
Observe que você precisa ter certeza de que a variável value
não contém sinais de porcentagem, então; e se você precisar inserir um literal $
ou uma barra invertida no comando sed, você precisará escapar deles, já que o shell os processa dentro de barras invertidas.
Você também pode querer considerar isso também:
Como garantir que a string interpolada na substituição 'sed' escape de todos os metacarismos