jq:错误:语法错误,意外的识别,预期$end(Unix shell引用问题?<top-level>


cat explorer/connection-profile/test-network.json | jq ".organizations.Org1MSP.adminPrivateKey.path |= 44ab"
jq: error: syntax error, unexpected IDENT, expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.organizations.Org1MSP.adminPrivateKey.path|=44ab                                               
jq: 1 compile error

但是用

也可以
cat explorer/connection-profile/test-network.json | jq ".organizations.Org1MSP.adminPrivateKey.path |= 44"

为什么?

实际上我想用

cat explorer/connection-profile/test-network.json | jq ".organizations.Org1MSP.adminPrivateKey.path |= ${PRIV_KEY}"

其中${PRIV_KEY}是44ab…_sk

您可以将字符串分配给可以在jq过滤器中使用的变量:

PRIV_KEY="44ab..._sk"
jq --arg path "$PRIV_KEY" '.organizations.Org1MSP.adminPrivateKey.path |= $path' explorer/connection-profile/test-network.json 

这种方法比直接在过滤器字符串中嵌入一个扩展的shell变量更安全,因为jq将正确处理任意值,而不是像引号(或它们的缺失)这样的东西。


注意jq将文件名作为过滤器表达式后的参数;这里不需要cat(当然,除非它代表curl或其他东西,并且您不使用现有文件)

你试过了吗?我通过设置表达式和<"之间的值来修复同样的错误

cat explorer/connection-profile/test-network.json | jq '.organizations.Org1MSP.adminPrivateKey.path |= "44ab"'

最新更新