首页 > 解决方案 > jq:错误:语法错误,意外 IDENT,期待 $end(Unix shell 引用问题?)在

问题描述

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

标签: shellvariablessyntax-errorjq

解决方案


您可以将字符串分配给可在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什么,而且你没有使用现有文件)


推荐阅读