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