如何对表示环境变量的字符串进行插值



我得到了这个runtime需要替换纯文本文件中的环境变量。假设文件如下所示:

version: v1
kind: Pod
metadata:
  - name: $PODNAME

我的bash脚本提取了所有的环境变量,这里是$PODNAME

一旦我掌握了哪些字符串标记是环境变量,我就想用运行脚本的主机的环境var值来替换它们。如上所述,我将字符串$PODNAME替换为$PODNAMEenv值。

根据我所拥有的,我可以列出所有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}"

我做了一些搜索,但似乎找不到已经涵盖这个奇怪的usecaseStackOverflow问题。

使用此处文档:

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,可以通过sede操作来完成。

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

相关内容

  • 没有找到相关文章

最新更新