如何用yq(v4.30.6)修改含斜杠的YAML字段值
解决yq修改带特殊字符的Annotations字段问题
问题出在a.b.c/d这个键名包含点(.)和斜杠(/)——yq默认会把点解析为嵌套层级的分隔符,斜杠也有特殊语法用途,直接写.metadata.annotations.a.b.c/d会被拆解成annotations→a→b→c/d的嵌套结构,自然匹配不到原有的单个键,反而生成了新的嵌套字段。
正确的实现方式
推荐用--arg参数传递变量(避免引号转义问题),同时用索引语法包裹带特殊字符的键名:
MY_VARIABLE=xxx yq --arg val "$MY_VARIABLE" '.metadata.namespace = $val | .metadata.annotations["a.b.c/d"] = $val' test.yaml
执行后结果
修改后的test.yaml内容如下:
apiVersion: v1 metadata: annotations: a.b.c/d: xxx namespace: xxx
补充说明
如果不想用--arg,也可以直接拼接变量,但要注意引号转义,写法如下:
MY_VARIABLE=xxx yq '.metadata.namespace = "'"$MY_VARIABLE"'" | .metadata.annotations["a.b.c/d"] = "'"$MY_VARIABLE"'"' test.yaml
内容的提问来源于stack exchange,提问作者Michael Heil
相关产品推荐
相关产品推荐

