yq v4.27.2中使用环境变量作为嵌套键的正确语法咨询
使用yq v4.27.2通过环境变量设置嵌套键的正确语法
要实现通过环境变量传递嵌套键并生成层级YAML结构,你需要将环境变量中的键字符串拆分为路径数组,再通过yq的路径操作函数创建嵌套结构,以下是两种可行方案:
方案1:使用setpath函数(推荐,简洁直观)
export KEY="key1.key2"; yq -n 'setpath(env(KEY) | split("."), "value")'
原理
env(KEY)读取环境变量中的键字符串split(".")将key1.key2拆分为路径数组["key1", "key2"]setpath(path_array, value)函数根据路径数组创建嵌套节点并赋值
方案2:使用reduce遍历构建(适合复杂场景)
如果需要处理更复杂的键层级或默认值,可通过reduce遍历路径数组逐步构建:
export KEY="key1.key2"; yq -n 'reduce (env(KEY) | split(".")) as $k ({}; .[$k] = if $k == last(env(KEY)|split(".")) then "value" else .[$k] // {} end)'
为什么之前的写法无效?
.env(KEY)="value":语法错误,yq会将.env(KEY)解析为尝试访问名为env(KEY)的键,而非读取环境变量后解析路径.[env(KEY)]="value":将key1.key2作为单个顶级键名,而非拆分后的嵌套路径,因此生成平级键值对
正确输出结果
两种方案执行后都会生成预期的嵌套结构:
key1: key2: value
内容的提问来源于stack exchange,提问作者coder99
相关产品推荐
相关产品推荐

