我有一个看起来像这样的 yaml 文件:
item_value: &item_value
value: true
array:
- name: item_1
<<: *item_value
- name: item_2
<<: *item_value
我想更新第一项的值,以便获得如下内容:
array:
- name: item_1
value: false
- name: item_2
value: true
我发现有类似的唯一方法是使用我在 yq (v4) 文档中找到的这个表达式:
yq e '( explode(.) | .array.[] | select(.name == "item_1") | .value = false ) as $test | explode(.) | .array.[] |= (. as $cur | $cur * ($test | select(.name == $cur.name)))' test.yaml
这似乎真的很棘手,我注意到使用以下较短的表达式我有相同的(坏的)结果(我不明白为什么这个工作顺便说一句):
yq e '( explode(.) | .array.[] | select(.name == "item_1") | .value = false ) as $test' test.yaml
结果:
item_value:
value: false
array:
- name: item_1
value: false
- name: item_2
value: false