Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Resolve bash variable containted in another variable [duplicate]

I have code like that:

TEXT_TO_FILTER='I would like to replace this $var to proper value
                in multiline text'
var=variable

All I want to get is:

TEXT_AFTER_FILTERED="I'd like to replace this variable to proper value"

So I did:

TEXT_AFTER_FILTERED=`eval echo $TEXT_TO_FILTER`
TEXT_AFTER_FILTERED=`eval echo $(eval echo $TEXT_TO_FILTER)`

Or even more weirder things, but without any effects. I remember that someday I had similar problem and I did something like that:

cat << EOF > tmp.sh
echo $TEXT_TO_FILTER
EOF
chmod +x tmp.sh
TEXT_AFTER_FILTERED=`. tmp.sh`

But this solution seems to be to much complex. Have any of You heard about easier solution?

like image 919
kokosing Avatar asked May 18 '10 07:05

kokosing


1 Answers

For security reasons it's best to avoid eval. Something like this would be preferable:

TEXT_TO_FILTER='I would like to replace this %s to proper value'
var=variable
printf -v TEXT_AFTER_FILTERED "$TEXT_TO_FILTER" "$var"
# or TEXT_AFTER_FILTERED=$(printf "$TEXT_TO_FILTER" "$var")
echo "$TEXT_AFTER_FILTERED"
like image 193
Dennis Williamson Avatar answered Nov 15 '22 05:11

Dennis Williamson