【问题标题】:jq: error: syntax error, unexpected IDENT, expecting $end (Unix shell quoting issues?) at <top-level>jq:错误:语法错误,意外 IDENT,在 <top-level> 处期待 $end(Unix shell 引用问题?)
【发布时间】:2021-09-02 08:22:58
【问题描述】:
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 '.organizations.Org1MSP.adminPrivateKey.path |= "44ab"'
  • @jas 是的,这很好用,但实际上我想用一个变量更改 44ab,所以我不能在这个字符串之外使用双引号 ('')。 ^ ^ 还是谢谢

标签: shell variables syntax-error jq


【解决方案1】:

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

【讨论】:

  • 有效!你真好。 ^ ^ 谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-12-12
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
相关资源
最近更新 更多