【问题标题】:get field from json and assign to variable in bash script?从json获取字段并分配给bash脚本中的变量?
【发布时间】:2014-03-20 09:08:51
【问题描述】:

我在 jsonFile 中有一个 json 存储

{
  "key1": "aaaa bbbbb",
  "key2": "cccc ddddd"
}

我在mycode.sh有代码:

#!/bin/bash
value=($(jq -r '.key1' jsonFile))
echo "$value"

在我运行./mycode.sh 之后,结果是aaaa 但如果我只运行jq -r '.key1' jsonFile,结果是aaaa bbbbb

谁能帮帮我?

【问题讨论】:

    标签: json bash jq


    【解决方案1】:

    用那行代码

    value=($(jq -r '.key1' jsonFile))
    

    您将这两个值都分配给array。注意命令周围的外部括号()。 因此,您可以单独访问这些值或回显整个数组的内容。

    $ echo "${value[@]}"
    aaaa bbbb
    
    $ echo "${value[0]}"
    aaaa
    
    $ echo "${value[1]}"
    bbbb
    

    由于您回显了$value,但没有指定要获取哪个值,因此您只能获取数组的第一个值。

    【讨论】:

    • 我尝试了您的解决方案,它可以在命令行上运行。但是,当我将相同的代码放在 bash 脚本中时,我不断收到 syntax error near unexpected token `(。知道为什么会这样吗?
    • 实际上我解决了我的问题 :) 我的问题是当我将输出分配给变量时,等号“=”周围有空格。我有 x = $(script) 之类的东西。删除空格后,它工作正常!谢谢:)
    • 不错。看看那里以获得极好的参考:mywiki.wooledge.org/BashGuide/Parameters
    • 如果我想将“aaaa bbbbb”作为一个元素保存到 bash 数组中怎么办?像(“aaaa bbbbb”)。我在解析 json 并将两个键值保存到数组中时遇到了同样的问题。 echo '{ "foo": "foovalue1 foovalue2", "bar": "barvalue" }' output: "foovalue1 foovalue2" "barvalue" 我想将它作为两个(不是三个!)元素保存到 bash 数组中,例如:array=($(echo '{ "foo": "foovalue1 foovalue2", "bar": "barvalue" }' | jq -r '.foo, .bar'))
    【解决方案2】:
    local result=$(<your_json_response>)
    local aws_access_key=$(jq -r '.Credentials.AccessKeyId' <<< ${result})
    local aws_secret_key=$(jq -r '.Credentials.SecretAccessKey' <<< ${result})
    local session_token=$(jq -r '.Credentials.SessionToken' <<< ${result})
    

    以上代码是另一种从 json 响应中获取值的方法。

    【讨论】:

    • 大声笑。我真的来到这里试图弄清楚如何为我的 AWS 信用做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2012-06-18
    • 2018-12-18
    • 2019-05-24
    • 2015-08-24
    • 2021-11-24
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多