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
我尝试使用 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