如何解决用 yq 保留引号
我有以下 yq 命令
yq e '.values.tags="{tag1:'value1',tag2:'value2'}"' -i my file.yaml
我需要引用这些值。 当我使用 yq 运行查询时,值周围的引号将被删除。我尝试了一些方法来删除它们,但到目前为止没有任何效果。
在我的 yaml 文件中,它最终是这样的:
values:
tags: "{tag1:value1,tag2:value2}"
虽然我期待:
values:
tags: "{tag1:'value1',tag2:'value2'}"
有人知道怎么做吗?谢谢
解决方法
单引号由您的 shell 解释。 Shell 连接带引号和未带引号的相邻值。从 shell 的角度来看,您提供了以下相邻的值:
function factorial(n) {
if (n ===1) {
return 1;
} else {
return n * factorial(n-1);
}
}
这些连接在一起,结果就是您所看到的。
有几种方法可以解决这个问题。我建议在 shell 级别对值使用双引号:
.values.tags="{tag1:
value1,tag2:
value2
}"
这样,你只需要对字符串中的双引号进行转义。 (这在 csh/tcsh 中不起作用。)
,谢谢@flyx。您提到的解决方案帮助我解决了我的问题。我需要将 yaml 转换为 json,修改然后再次将其转换回 yaml。
我就是这样做的:
cat abc.yaml | sed -e 's,\",\\",g' | yq eval -j | jq . > bca.json
jq -e '(.spec.template.spec.volumes[1]) = "" ' bca.json | sponge bca.json
yq eval -P bca.json > bca.yaml
sed -i -e 's,g' bca.yaml
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。