如何在Bash中去除jq输出的双引号与转义符且不转为单行
问题解决:生成嵌套JSON格式的Vault密钥输出
当前问题
执行现有命令后,生成的JSON输出将密钥对象拆分为了字符串数组:
{ "secrets": [ [ "{", " \"name\": \"testSecret\",", " \"vault-apikey\": \"kv\",", " \"vault-value\": \"sabrinaTest\"", "}" ] ] }
但实际需要的是直接嵌套密钥对象的简洁格式:
{ "secrets": [ [ { "name" : "testSecret", "vault-apikey" : "kv", "vault-value" : "sabrinaTest" } ] ] }
问题原因
原命令中使用了jq -r将处理后的密钥对象转为带换行的字符串,后续又通过split("\n")拆分字符串,最终导致输出是字符串数组而非嵌套的JSON对象。
解决方案
直接通过jq一步完成JSON结构的构建,无需中间字符串转换步骤,修改后的命令如下:
TEST_SECRET_JSON=$(hcp vault-secrets secrets open testSecret --format=json) echo "$TEST_SECRET_JSON" | jq -n '{ secrets: [ [ {name: .name, "vault-apikey": .type, "vault-value": .static_version.value} ] ] }' >> secret.json
也可以用更简洁的单命令写法,省去变量存储:
hcp vault-secrets secrets open testSecret --format=json | jq -n '{ secrets: [ [ {name: .name, "vault-apikey": .type, "vault-value": .static_version.value} ] ] }' >> secret.json
说明
- 移除了中间将对象转为字符串的步骤,直接在jq中构建目标嵌套结构
{ secrets: [ [ ... ] ] }直接生成包含双层数组的对象,内层数组中就是需要的密钥对象- 保留原逻辑中对
name、type、static_version.value的字段映射,确保数据对应正确
内容的提问来源于stack exchange,提问作者Sabrina Grosse
相关产品推荐
相关产品推荐

