替换bash中$ -formatted字符串中的所有变量

时间:2017-12-11 10:05:03

标签: bash variables

我在bash脚本中有一些变量。变量来自另一个脚本。

我有一个其他变量,其中包含一些$ name的字符串。 如何使用此字符串中变量的实际值替换所有类似变量的名称? (我不知道所有可能的变量名称)

示例:

#From an other place, they are imported by source <( ....)
abc="FOO"
rst="BAR"
format_base='xyz $abc $rst'

# How To Process formate_base?
????

#The Expected Result
echo "$format_base_processed"
#Should Output: xyz FOO BAR

1 个答案:

答案 0 :(得分:1)

在您的示例中,使用双引号而不是单引号就足够了。如果在读取双引号字符串时存在变量,则没有问题:

abc="FOO"
rst="BAR"
format_base="xyz $abc $rst"

如果(出于某些非常复杂的原因)您必须在使用的变量之前指定format_base,则可以使用evalbash -c之类的内容:

format_base='xyz $abc $rst'
# "load" variables $abc and $rst
format_base_processed=$(eval echo "\"$format_base\"")

请注意,上述命令存在安全问题,尤其是在您未指定$format_base的情况下。例如:

format_base='$(injectedCommand)'
format_base_processed=$(eval echo "\"$format_base\"")

在这里,我们将执行echo "$(injectedCommand)",其中injectedCommand可以是任何内容,例如rm -rf *(请勿在家中尝试此操作)。