所以我想打印包含其他变量的env变量。 例如,我有:
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中设置env并将其与Kubernetes envs一起使用,例如SERVICE_HOST
和SERVICE_PORT
另一个问题是Kubernetes正在将我的MY_VARS
变量更改为多行内部容器,因此它看起来像:
MY_VARS=My var are:
VAR1 = ${MY_VAR1}
VAR2 = ${MY_VAR2}
希望非常清楚:)
while read -r line
do
printf "$line\n" >> conf.tmp
done <<< "$CONFIG"
while read -r line
do
eval echo $line >> conf
done < conf.tmp
我将CONFIG
变量传递给容器,此变量包含具有IP和端口的Kubernetes服务变量。
由于eval
无法解析\n
,我不得不两次。
答案 0 :(得分:1)
使用bash,您可以执行indirect references但不会直接替换变量的值,只有在从bash终端使用时才会替换它。
答案 1 :(得分:0)
你必须先定义变量。以下脚本打印出您想要的内容:
MY_VAR1=var1
MY_VAR2=var2
MY_VARS="My var are:\nVAR1 = ${MY_VAR1}\nVAR2 = ${MY_VAR2}"
printf "${MY_VARS}"