我有一个JSON数组,如下所示。
[ { "release": "2008.1006", "kernel": "2.6.32-754.3.5", "os": "6.10", "current": true }, { "release": "2008.1006", "kernel": "3.10.0-862.14.4", "os": "7.5", "current": true } ]
当我使用${#array[@]}
打印数组长度时,结果是1。我想要一个包含使用shell脚本的数组中存在的对象的数组。
我想要一个花括号下的对象数组。我尝试了很多次,但没有得到任何想要的结果。
发布于 2018-10-24 06:17:51
s='[ { "release": "2008.1006", "kernel": "2.6.32-754.3.5", "os": "6.10", "current": true }, { "release": "2008.1006", "kernel": "3.10.0-862.14.4", "os": "7.5", "current": true } ]'
IFS=$'\n' read -r -d '' -a items < <(jq -c '.[]' <<<"$s" && printf '\0')
echo "Number of items: ${#items[@]}"
(( ${#items[@]} )) && printf ' - %s\n' "${items[@]}"
...properly发出:
Number of items: 2
- {"release":"2008.1006","kernel":"2.6.32-754.3.5","os":"6.10","current":true}
- {"release":"2008.1006","kernel":"3.10.0-862.14.4","os":"7.5","current":true}
如果只支持bash4.0或更高版本,您可以用readarray -t
替换read -a
(尽管如果jq
调用失败,这将不再传递不成功的退出状态):
readarray -t items <<<"$(jq -c '.[]' <<<"$s")"
https://stackoverflow.com/questions/52955666
复制相似问题