无法在命令行上使用 jq use/pass shell 变量

Cannot use/pass shell variables using jq on command line

我是 jq 的新手,我正在使用本教程将新组织添加到超级账本结构网络。

整个教程中大量使用了 jq,尤其是修改 json 个文件。

本教程使用示例组织名称,但我试图使组织名称动态化。除了我尝试将变量传递给 jq 之外,一切都很好。

这是 jq 命令及其输出。

jq版本:1.5.1

$ 导出 MSPID=Org4MSP $ echo $MSPID Org4MSP

正在尝试使用 env 传递变量。

关键词:env.MSPID

$ jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"env.MSPID":.[1]}}}}}' config.json org4.json

输出片段:它不打印 Org4MSP,而是打印文字字符串 env.MSPID

      "env.MSPID": {
        "groups": {},
        "mod_policy": "Admins",
        "policies": {
          "Admins": {
            "mod_policy": "Admins",
            "policy": {
              "type": 1,
              "value": {
                "identities": [
                  {

尝试使用 --arg 选项传递变量

关键字:“$MSP”

jq --arg MSP "$MSPID" -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"$MSP":.[1]}}}}}' config.json org4.json

输出片段:它不打印 Org4MSP,而是打印文字字符串 $MSP

      "$MSP": {
        "groups": {},
        "mod_policy": "Admins",
        "policies": {
          "Admins": {
            "mod_policy": "Admins",
            "policy": {
              "type": 1,
              "value": {
                "identities": [
                  {

尝试使用 --arg 选项而不使用双引号传递变量:

关键字:$MSP

$ jq --arg MSP "$MSPID" -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {$MSP:.[1]}}}}}' config.json org4.json

jq: 错误:语法错误,意外的“:”,期待“}”(Unix shell 引用问题?)第 1 行:

.[0] * {"channel_group":{"groups":{"Application":{"groups": {$MSP:.[1]}}}}}

jq: 1 个编译错误

正在尝试使用 env 传递变量。并且没有双引号:

关键词:env.MSPID

$ jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {env.MSPID:.[1]}}}}}' config.json org4.json

jq:错误:语法错误,意外的 FIELD,期待“}”(Unix shell 引用问题?)在第 1 行:

.[0] * {"channel_group":{"groups":{"Application":{"groups": {env.MSPID:.[1]}}}}}

jq: 1个编译错误

如果这似乎是一个微不足道的问题,我深表歉意,但我已经在网上和文档中进行了搜索,但不明白为什么 JSON 键不会转换为 shell 变量的值。

谢谢

环境变量

在你的子表达式中:

{"env.MSPID":.[1]}

您引用了 env.MSPID 从而使其成为文字字符串。既然你想调用 env 函数,你应该改写:

{ (env.MSPID):.[1]}

需要括号以确保 jq 正确计算带括号的表达式。

{$MSP:.[1]}

如上所述,当必须评估表达式以确定键的字符串值时,必须将表达式括起来,例如

 {($MSP):.[1]}