ecoa uma string com uma string dentro dela

0

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 KoneLinx 06.01.2018 / 23:24

2 respostas

0
O

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)"\"
    
por 06.01.2018 / 23:56
0

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!
    
por 07.01.2018 / 01:05