我有runtime
需要替换纯文本文件中的环境变量。假设文件如下所示:
version: v1
kind: Pod
metadata:
- name: $PODNAME
我的bash脚本提取了所有环境变量,$PODNAME
。
一旦我掌握了什么字符串标记是环境变量,我想用运行脚本的主机的环境var值替换它们。所以上面,我将$PODNAME
替换为env
的{{1}}值。
凭借我所拥有的,我可以列出所有$PODNAME
个变量。但我似乎无法完成更换。对于我的玩具示例,我想要回显字符串标记和它应该替换的值:
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}"
的{{1}}问题。
答案 0 :(得分:3)
PODNAME="foo"
cat << EOF
version: v1
kind: Pod
metadata:
- name: $PODNAME
EOF
输出:
version: v1 kind: Pod metadata: - name: foo
答案 1 :(得分:2)
Heredoc本来是一个很好的方法,但与我试图做的事情并不相符:
我想要回显字符串标记和它应该替换的值
我正走在正确的轨道上:
echo "$element ${$element}"
最后,这是有效的:
EL=$(echo "$element" | sed 's/\$//')
echo "$element ${!EL}"
无论如何,为所有人提供支持。
答案 2 :(得分:1)
如果您有e
,可以使用sed
的{{1}}操作完成。
$ 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
导出环境变量以查看其值。