arrays - Bash - 仅在出现新行而不是空格时进入下一个索引?

标签 arrays json bash jq

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

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

{
    "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

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

谢谢。

最佳答案

bash 中的一个简单脚本,用于将输出的每一行输入数组 myArray

#!/bin/bash

myArray=()
while IFS= read -r line; do
    [[ $line ]] || break  # break if line is empty
    myArray+=("$line")
done < <(jq -r .user[].name <<< "$getNames")

# To print the array
printf '%s\n' "${myArray[@]}"

关于arrays - Bash - 仅在出现新行而不是空格时进入下一个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38633599/

相关文章:

Javascript/jQuery 在数组的其余部分查找并删除数组值

python - 仅替换屏蔽的 numpy 数组中的未屏蔽值

bash - SSH 捕获远程 ssh 命令的退出代码

C# 可变数组项?

c - 函数不向数组分配任何内容(使用指针算术)

javascript - eval json数据在IE和firefox中获得不同的长度

javascript - 使用子进程在 Node.js 中进行复杂的数据操作

reactjs - 使用 prevState 和 useState 钩子(Hook)更新对象内数组内的对象

Bash 循环遍历目录并重命名每个文件

linux - 加载不受信任的配置变量