bash apenas expande as variáveis em seu código, mas não nas variáveis (ou outras expansões). Si em vez de
echo $(sed -n "${l}{p;q;}" < ${scriptdir}/COFFEE)
você precisa
eval echo \""$(sed -n "${l}{p;q;}" < ${scriptdir}/COFFEE)"\"
Eu tenho um arquivo de texto contendo isso:
Hello \"${USER}\"!
Today you drank ${COFFEE_COUNT} coffees.
See you tomorrow!
Agora tenho um script bash em execução que possui essas cadeias atribuídas (e exportadas). Mas quando esse script ecoa esse arquivo, ele não substitui as strings.
... code ...
export COFFEE_COUNT="$(some code)" #${USER} is set by default
... code ...
t=$(wc -l < ${scriptdir}/COFFEE);
for ((l=1;l<t;l++));
do
echo $(sed -n "${l}{p;q;}" < ${scriptdir}/COFFEE);
done;
... code ...
nem o trabalho com gatos
cat "${scriptdir}/COFFEE";
Existe uma maneira de fazer isso funcionar?
saída obrigatória:
Hello "username"!
Today you drank 3 coffees.
See you tomorrow!
Por que usar um arquivo adicional quando um documento aqui pode fazer o trabalho:
#!/bin/bash
export COFFEE_COUNT=$1 #${USER} is set by default
export USER=username
cat <<_EOT_
Hello "${USER}"!
Today you drank ${COFFEE_COUNT} coffees.
See you tomorrow!
_EOT_
Em execução:
$ ./script 13
Hello "username"!
Today you drank 13 coffees.
See you tomorrow!