在另一个env中parsingenv

所以我想打印我的envvariables,其中包含其他variables。 例如,我有:

MY_VARS="My var are:\nVAR1 = ${MY_VAR1}\nVAR2 = ${MY_VAR2}" MY_VAR1=var1 MY_VAR2=var2 

我想以这样的方式使它成为可能:

 printf "${MY_VARS}" > my.conf 

要么

 printf "$(echo ${MY_VARS})" > my.conf 

像在my.conf文件中那样:

 My var are: VAR1 = var1 VAR2 = var2 

但它的工作。 是否有可能做这样的事情? 我需要它与Kubernetes,所以我可以在我的ReplicationController设置环境,并使用它与像SERVICE_HOSTSERVICE_PORT Kubernetes ENV还有另一个问题,Kubernetes正在改变我的MY_VARSvariables为多行内容器,所以它看起来像:

 MY_VARS=My var are: VAR1 = ${MY_VAR1} VAR2 = ${MY_VAR2} 

希望这很清楚:)

我的解决scheme

 while read -r line do printf "$line\n" >> conf.tmp done <<< "$CONFIG" while read -r line do eval echo $line >> conf done < conf.tmp 

其中, CONFIGvariables由我传递给容器,而此variables包含具有IP和端口的Kubernetes服务variables。 我不得不做两次因为eval不能解决\n

使用bash可以执行间接引用,但是它不会直接replacevariables的值,只有在bashterminal中使用它时才可以。

你必须先定义variables。 以下脚本打印出你想要的:

 MY_VAR1=var1 MY_VAR2=var2 MY_VARS="My var are:\nVAR1 = ${MY_VAR1}\nVAR2 = ${MY_VAR2}" printf "${MY_VARS}"