Bash - 只有在出现新行时才转到下一个索引,而不是空格?

时间:2016-07-28 10:21:17

标签: arrays json bash jq

我正在使用名为jq的工具解析JSON响应。 jq的输出将在命令行中为我提供一个全名列表。

我有变量 getNames ,其中包含JSON,例如:

{
    "count": 49,
    "user": [{
        "username": "jamesbrown",
        "name": "James Brown",
        "id": 1
    }, {
        "username": "matthewthompson",
        "name": "Matthew Thompson",
        "id": 2
    }]
}

我通过JQ传递它以使用以下命令过滤json:

echo $getNames | jq -r .user[].name

这给了我一个这样的列表:

James Brown   
Matthew Thompson   

我想将这些条目中的每一个放入bash数组中,因此我输入以下命令:

declare -a myArray    
myArray=( `echo $getNames | jq -r .user[].name` )

但是,当我尝试使用:

打印数组时
printf '%s\n' "${myArray[@]}"

我得到以下内容:

James
Brown
Matthew
Thompson

如何确保在新行之后创建新索引而不是空格?为什么名称被分开?

感谢。

2 个答案:

答案 0 :(得分:4)

只需使用IF EXIST命令将多行读入数组,如下所示:

mapfile

答案 1 :(得分:4)

{ "_id" : ObjectId("569d03b66abefa8be9c49f26"), "brands" : [ "Brand1" "Brand2" "Brand3" ], "name" : "Family Jewels", "address" : "", "housenr" : "", "postalcode" : "1234 AQ", "city" : "Amsterdam", "phone" : "+31 570 - 514200", "email" : "jewelry@email.nl", "web" : "http://www.familyjewels.nl/", "kind" : "horloges", "country" : "Nederland", "brandsNetherlands" : [ ] } 中的一个简单脚本,用于将每行输出反馈到数组bash

myArray