首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能使用命令行上的jq使用/传递shell变量

不能使用命令行上的jq使用/传递shell变量
EN

Stack Overflow用户
提问于 2020-01-10 18:11:05
回答 1查看 201关注 0票数 0

我对jq相当陌生,我正在使用本教程将一个新的Org添加到超级分类账结构网络中。

在整个教程中,jq得到了广泛的使用,特别是修改json文件。

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

以下是jq命令及其输出。

jq版本: 1.5.1

出口MSPID=Org4MSP $ echo $MSPID Org4MSP

试图使用env传递变量。

关键词: env.MSPID

jq -s '.* {"channel_group":{"groups":{"Application":{"groups":{“env.MSPID”:.1}‘config.json org4.json

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

代码语言:javascript
复制
      "env.MSPID": {
        "groups": {},
        "mod_policy": "Admins",
        "policies": {
          "Admins": {
            "mod_policy": "Admins",
            "policy": {
              "type": 1,
              "value": {
                "identities": [
                  {

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

关键词:"$MSP“

$MSPID‘-s’。* {"channel_group":{"groups":{"Application":{"groups":{“$MSP”:.1}‘config.json org4.json

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

代码语言:javascript
复制
      "$MSP": {
        "groups": {},
        "mod_policy": "Admins",
        "policies": {
          "Admins": {
            "mod_policy": "Admins",
            "policy": {
              "type": 1,
              "value": {
                "identities": [
                  {

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

关键词:$MSP

$ jq --arg "$MSPID“-s‘* {"channel_group":{"groups":{"Application":{"groups":{$MSP:.1}‘config.json org4.json

jq: error:语法错误,意外的':',期待'}‘(Unix引用问题?)在第1行:

。* {"channel_group":{"groups":{"Application":{"groups":{$MSP:.1}

jq: 1编译错误

试图使用env传递变量。没有双引号:

关键词: env.MSPID

jq -s '.* {"channel_group":{"groups":{"Application":{"groups":{env.msPID:.1}‘config.json org4.json

jq: error:语法错误,意外字段,期望'}‘(Unix引用问题?)在第1行:

。* {"channel_group":{"groups":{"Application":{"groups":{env.mspd:.1}

jq: 1编译错误

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-10 18:47:24

环境变量

在你的子表达式中:

代码语言:javascript
复制
{"env.MSPID":.[1]}

您引用了env.MSPID,从而使它成为一个文字字符串。由于您想调用env函数,所以应该编写:

代码语言:javascript
复制
{ (env.MSPID):.[1]}

需要使用括号来确保jq将正确计算括号大小的表达式。

{$MSP:.1}

如前所述,当必须计算表达式以确定键的字符串值时,表达式必须为括号。

代码语言:javascript
复制
 {($MSP):.[1]}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59686938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档