我得到了这个runtime
需要替换纯文本文件中的环境变量。假设文件如下所示:
version: v1
kind: Pod
metadata:
- name: $PODNAME
我的bash脚本提取了所有的环境变量,这里是$PODNAME
。
一旦我掌握了哪些字符串标记是环境变量,我就想用运行脚本的主机的环境var值来替换它们。如上所述,我将字符串$PODNAME
替换为$PODNAME
的env
值。
根据我所拥有的,我可以列出所有env
变量。但我似乎无法完成更换。对于我的玩具示例,我想同时回显字符串标记和它应该替换的值:
#!/bin/bash
IFS=', ' read -a array <<< $(grep -F -- "$" file.yaml | sed -e 's/ value: //' | tr 'n' ' ')
for element in "${array[@]}"
do
echo "$element"
done
我试过这样的东西:
echo "$element ${$element}"
我做了一些搜索,但似乎找不到已经涵盖这个奇怪的usecase
的StackOverflow
问题。
使用此处文档:
PODNAME="foo"
cat << EOF
version: v1
kind: Pod
metadata:
- name: $PODNAME
EOF
输出:
版本:v1种类:Pod元数据:-名称:foo
Heredoc是一个很好的方法,但与我试图做的不一致:
我想回显字符串标记和它应该取代的值
我走在了正确的轨道上:
echo "$element ${$element}"
最终,以下是行之有效的方法:
EL=$(echo "$element" | sed 's/$//')
echo "$element ${!EL}"
不管怎样,都要为所有人投票。
如果您有gnu sed
,可以通过sed
的e
操作来完成。
$ export PODNAME=foo
$ cat file.yaml
version: v1
kind: Pod
metadata:
- name: $PODNAME
$ sed -r 's/^(.*) ($[A-Z]+)/echo "1 2"/e' file.yaml
version: v1
kind: Pod
metadata:
- name: foo
需要为sed
导出环境变量才能查看其值。