На самом деле следующее содержит ошибки:
# BAD: Output line of * is replaced with list of local files; can't deal with whitespace
arr=( $( curl -k "$url" | jq -r '.[].item2' ) )
Вместо этого используйте:
# GOOD (with bash 4.x+), but can't detect failure
readarray -t arr < <(curl -k "$url" | jq -r '.[].item2' )
... или, что еще лучше ...
# GOOD (with bash 3.x+), *and* has nonzero status if curl or jq fails
IFS=$'\n' read -r -d '' -a arr \
< <(set -o pipefail; curl --fail -k "$url" | jq -r '.[].item2' && printf '\0')