wget 的输出(到 CouchDB)作为 for 循环中使用的数组

Output of wget (to CouchDB) as array used in for-loop

我尝试使用 wget 的输出构建一个可用于 for 循环的数组:

RESULT="`wget -qO- http://myCouchDBServer.com:5984/_all_dbs`"
echo $RESULT

我得到的是这样的:

["_replicator","_users","mydb1","mydb2","mydb3","mydb4","mydb5"]

目前我循环遍历我手动编写的数组:

databases=(mydb1 mydb2 mydb2)

for var in "${databases[@]}"
do
#  echo "${var}"
  # do something on $var
    filename="${var}_$(date +%Y_%m_%d_%H_%M_%S).json"
    echo $filename
 bash couchdb-backup.sh -b -H myHostIP_Adress -d ${var} -f $filename -u myUsername -p myPassword

done

现在我想使用 wget 的响应并从该响应构建一个数组,我可以将其用于我的 for 循环。

我试过了

RESULT2= echo "$RESULT" | sed 's/\(\[\|\]\)//g'

去掉方括号,尝试建数组 但是没有输出,因此也没有循环 运行...

STR_ARRAY=(`echo $RESULT2 | tr "," "\n"`)
for x in "${STR_ARRAY[@]}"
do
echo "> [$x]"
done

知道如何更进一步吗?

PS: (我的 couchdb 只能通过内部网访问,但我发现了一个 url 用于测试:http://example.iriscouch.com/_all_dbs

由于 couch 正在输出 JSON,您需要使用 JSON 解析器对其进行处理。例如,jq:

echo '["_replicator","_users","mydb1","mydb2","mydb3","mydb4","mydb5"]' | jq -r '.[]|.'
_replicator
_users
mydb1
mydb2
mydb3
mydb4
mydb5

所以,你可以这样做:

mapfile -t all_dbs < <(
    wget -qO- http://myCouchDBServer.com:5984/_all_dbs | jq -r '.[]|.'
)
for db in "${all_dbs[@]}"; do ...; done