在进程替换 bash 中访问数组元素

在进程替换 bash 中访问数组元素

我有一个文本文件,如下所示:

b4238ca2-cb8d-11e4-8731-1681e6b88ec1,https,username,password,ipaddress    
b4238f0e-cb8d-11e4-8731-1681e6b88ec1,https,username,password,ipaddress
b4239058-cb8d-11e4-8731-1681e6b88ec1,https,username,password,ipaddress

注意:用户名、密码和 IP 地址均已更改,以免泄露敏感信息,它们在我正在使用的文本文件中是真实的。

我编写了以下 bash 脚本来逐行读取并将每个项目放入数组中。以前这有效,但现在它在流程替换中,不再有效。我假设这与我访问数组元素的方式有关,但我不确定出了什么问题。片段如下:

i=0
declare -a devices

while read line
do
    devices[i]=$line
    ((i++))
done < test_data.txt
timestamp=$(date +"%s")
echo "${devices[@]}"
IFS=","
declare -a devarr
for device in "${devices[@]}"
do
    devarr=($device)
    read dateStrNew dateStrOld < <(curl -k -q "${devarr[1]}://${devarr[2]}:${devarr[3]}@${devarr[4]}/camerainfo" | html2text |     gawk '/Newest Sequence/ { new=$3" "$4 }/Oldest Sequence/ {old=$3" "$4}END {OFS=","; print new,old }')

另外,我根据之前问题建议的一些替代代码以及我在研究时遇到的其他代码的组合尝试了以下内容,但它也不起作用。然而,如果这样做的话,事情将会大大简化。这可行并且是更好的解决方案吗?

while read -u 3 line
do
    read UUID protocol username passwd ip_address
    curl_call="${protocol}://${ip_address}:${username}@${passwd}/report"
    echo $curl_call

    read dateStrNew dateStrOld < <(curl -k -q "$curl_call" | html2text | gawk'/Newest Sequence/ { new=$3" "$4 }/Oldest Sequence/ {old=$3" "$4}END {OFS=",";print new,old }')

done 3< test_data.txt

非常感谢任何帮助,因为无论如何这将是一个漫长的夜晚!谢谢!

答案1

你理解简单的语法吗?

while IFS=',' read -r UUID protocol username passwd ip_address
do
    curl_call="${protocol}://${username}:${passwd}@${ip_address}/report"
    echo $curl_call
done < test_data.txt

相关内容