如何插入表示环境变量的字符串
How to interpolate strings that represent environment variables
我知道 runtime
需要替换纯文本文件中的环境变量。假设文件如下所示:
version: v1
kind: Pod
metadata:
- name: $PODNAME
我的 bash 脚本提取所有环境变量,这里是 $PODNAME
。
一旦我掌握了哪些字符串标记是环境变量,我想将它们替换为主机 运行 脚本中的环境变量值。所以在上面,我将字符串 $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}"
我做了一些搜索,但似乎找不到 Whosebug
已经涵盖了这个奇怪 usecase
的问题。
使用 here document:
PODNAME="foo"
cat << EOF
version: v1
kind: Pod
metadata:
- name: $PODNAME
EOF
输出:
version: v1
kind: Pod
metadata:
- name: foo
如果你有gnu sed
,可以用sed
的e
动作完成。
$ export PODNAME=foo
$ cat file.yaml
version: v1
kind: Pod
metadata:
- name: $PODNAME
$ sed -r 's/^(.*) ($[A-Z]+)/echo " "/e' file.yaml
version: v1
kind: Pod
metadata:
- name: foo
需要导出环境变量,sed
才能看到它的值。
Heredoc 本来是个好方法,但与我尝试做的不一致:
I'd like to echo out both the string token and the value it should replace
我在这方面走在了正确的轨道上:
echo "$element ${$element}"
最后,这是有效的:
EL=$(echo "$element" | sed 's/$//')
echo "$element ${!EL}"
所有人都投赞成票,无论如何。
我知道 runtime
需要替换纯文本文件中的环境变量。假设文件如下所示:
version: v1
kind: Pod
metadata:
- name: $PODNAME
我的 bash 脚本提取所有环境变量,这里是 $PODNAME
。
一旦我掌握了哪些字符串标记是环境变量,我想将它们替换为主机 运行 脚本中的环境变量值。所以在上面,我将字符串 $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}"
我做了一些搜索,但似乎找不到 Whosebug
已经涵盖了这个奇怪 usecase
的问题。
使用 here document:
PODNAME="foo"
cat << EOF
version: v1
kind: Pod
metadata:
- name: $PODNAME
EOF
输出:
version: v1 kind: Pod metadata: - name: foo
如果你有gnu sed
,可以用sed
的e
动作完成。
$ export PODNAME=foo
$ cat file.yaml
version: v1
kind: Pod
metadata:
- name: $PODNAME
$ sed -r 's/^(.*) ($[A-Z]+)/echo " "/e' file.yaml
version: v1
kind: Pod
metadata:
- name: foo
需要导出环境变量,sed
才能看到它的值。
Heredoc 本来是个好方法,但与我尝试做的不一致:
I'd like to echo out both the string token and the value it should replace
我在这方面走在了正确的轨道上:
echo "$element ${$element}"
最后,这是有效的:
EL=$(echo "$element" | sed 's/$//')
echo "$element ${!EL}"
所有人都投赞成票,无论如何。