我在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
答案 0 :(得分:1)
在您的示例中,使用双引号而不是单引号就足够了。如果在读取双引号字符串时存在变量,则没有问题:
abc="FOO"
rst="BAR"
format_base="xyz $abc $rst"
如果(出于某些非常复杂的原因)您必须在使用的变量之前指定format_base
,则可以使用eval
或bash -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 *
(请勿在家中尝试此操作)。