如何插入表示环境变量的字符串

时间:2015-06-26 19:22:01

标签: bash environment-variables env

我有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}}问题。

3 个答案:

答案 0 :(得分:3)

使用here document

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导出环境变量以查看其值。