是否可以使用数组值作为变量? 例如,我有这个脚本:Bash数组值作为变量
#!/bin/bash
SOURCE=$(curl -k -s $1 | sed 's/{//g;s/}//g;s/,/"\n"/g;s/:/=/g;s/"//g' | awk -F"=" '{ print $1 }')
JSON=$(curl -k -s $1 | sed 's/{//g;s/}//g;s/,/"\n"/g;s/:/=/g;s/"//g' | awk -F"=" '{ print $NF }')
data=$2
readarray -t prot_array <<< "$SOURCE"
readarray -t pos_array <<< "$JSON"
for ((i=0; i<${#prot_array[@]}; i++)); do
echo "${prot_array[i]}" "${pos_array[i]}" | sed 's/NOK/0/g;s/OK/1/g' | grep $2 | awk -F' ' '{ print $2,$3,$4 }'
done
编辑:
我只是说:grep $2 | awk -F' ' '{ print $2,$3,$4 }'
用法:
./json.sh URL
样品(很短)输出:
DATABASE 1
STATUS 1
我不想回显所有行,我想使用DATABASE STATUS作为变量$ DATABASE并将其回显出来。 我只需要命令行中的DATABASE(或任何其他)值。 是否有可能使用这样的东西?
./json.sh URL $DATABASE
如果需要,可以多解释一下。
编辑: 没有任何打印格式等卷曲输出:
{
"VERSION":"R3.1",
"STATUS":"OK",
"DATABASES":{
"READING":"OK"
},
"TIMESTAMP":"2017-03-08-16-20-35"
}
输出使用脚本:
VERSION R3.1
STATUS 1
DATABASES 1
TIMESTAMP 2017-03-08-16-21-54
我想是前文所述。例如使用数据库varible $ DATABASE,并以某种方式获取的值 “1”
编辑:
./json.sh https://gitlab.uwe.ac.uk/dc2-roskilly/angular-qs/raw/master/.npm/nan/2.4.0/package/package.json
最后输出:从uconn.edu
./json.sh https://github.uconn.edu/raw/nam12023/novaLauncher/master/manifest.json
另一个
随机JSON开始于:
name nan
version 2.4.0
从命令行:./json.sh URL版本
在leats它适用于我。
为什么不能使用正确的'JSON'解析器来处理'cURL'的json输出?而不是'sed'?它使你的任务变得更简单。 – Inian
请发布你的'curl'输出和你正在寻找的确切输出 – Inian
请更新它作为问题的一部分,并从评论中删除 – Inian