如何在Bash脚本中用yq将YAML配置转为带前缀的环境变量
问题:将嵌套YAML转换为带指定前缀的环境变量
给定如下YAML配置文件:
key1: key11: value1 key12: value2 key2: key21: value3
如何在Bash脚本中优先使用yq工具,将其转换为带有TF_VAR_前缀的环境变量?期望输出如下:
TF_VAR_key11=value1 TF_VAR_key12=value2 TF_VAR_key21=value3
解决方案(使用mikefarah/yq v4+)
直接通过yq遍历YAML中的二级键值对,拼接出目标格式的环境变量字符串:
yq e 'to_entries[] | .value | to_entries[] | "TF_VAR_\(.key)=\(.value)"' your_config.yaml
命令说明:
to_entries[]:将顶层的key1、key2转换为键值对数组,方便遍历.value:提取每个顶层键对应的子配置对象(比如key1包含的key11、key12键值对)- 再次使用
to_entries[]:将子配置对象展开为单个键值对 "TF_VAR_\(.key)=\(.value)":通过字符串模板拼接前缀、键名和值,输出符合要求的格式
如果需要直接将这些变量导入当前Shell会话,可以用eval执行生成的导出命令:
eval $(yq e 'to_entries[] | .value | to_entries[] | "export TF_VAR_\(.key)=\(.value)"' your_config.yaml)
执行后即可直接使用这些环境变量,例如执行echo $TF_VAR_key11会输出value1。
注意点:
- 请确保安装的是mikefarah/yq v4及以上版本,这是当前主流的yq实现;旧版的kislyuk/yq(Python实现)语法不同,不推荐使用。
- 如果YAML中的值包含空格或特殊字符,建议将值用单引号包裹,修改模板为
"TF_VAR_\(.key)='\(.value)'"。
内容的提问来源于stack exchange,提问作者Liza Shakury
相关产品推荐
相关产品推荐

