Stepbro
Stepbro

Reputation: 3

Bash variable from within bash variable with text

I'm trying to echo a string into a file which has variables inside it along with plaintext. and use it later with a command but have the variable be interpreted. I have tried to use eval with limited success but then I cannot include characters such as <>

body=`cat ~/body`;

echo -e "${body}" >> message

message is later used in the following command

sendmail -f [email protected] $recipient < message;

If the contents of message are:

"Hello. The current epoch time is<br>
${EPOCHSECONDS}
"

I'd like the output to have the var interpreted and the body shown as

"Hello. The current epoch time is<br>
1662823014"

Is this possible? Thanks.

Upvotes: 0

Views: 142

Answers (2)

Luis Cardoso
Luis Cardoso

Reputation: 91

Yes, it's possible, you can do this as follows:

#!/bin/bash
body=$( cat ~/body )

##### Set Message Variables ##########################################
EPOCHSECONDS=1662823014

##### Replace Template Variables #####################################
final_message=$( eval echo \"${body}\" )

##### Do whatever you want with ${final_message} #####################
echo "Final Message: "
echo "${final_message}"

Upvotes: 0

Vadim Beskrovnov
Vadim Beskrovnov

Reputation: 961

envsubst https://www.gnu.org/software/gettext/manual/html_node/envsubst-Invocation.html should help you.

For example

$ cat message.txt
Hello. The current epoch time is
${EPOCHSECONDS}.

$ EPOCHSECONDS=1662823014

$ export EPOCHSECONDS

$ cat message.txt | envsubst
Hello. The current epoch time is
1662823014

Upvotes: 1

Related Questions