开发者

Resolve bash variable containted in another variable [duplicate]

This question already has answers here: Bash expand variable in a variable (5 answers) 开发者_JS百科 Closed 2 years ago.

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?


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"


TEXT_AFTER_FILTERED="${TEXT_TO_FILTER//\$var/$var}"

or, using perl:

export var
TEXT_AFTER_FILTERED="$(echo "$TEXT_TO_FILTER" | perl -p -i -e 's/\$(\S+)/$ENV{$1} || $&/e')"

This is still more secure than eval.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜