具有两个字符串的关联数组

具有两个字符串的关联数组

是否可以使用 [key] 部分中的字符串来循环带有键和值的简单数组?

#!/bin/bash -x

wget url://stringlist1
wget url://stringlist2

#cat/sed some stuff ....

declare -A targetarray

loop $resultfromstringlist1
in strlistarray1 # filled with ( aka1 kaka hu3hu blabla )

loop $resultfromstringlist2
in strlistarray2 # filled with ( Thoralf Mirkoslav Pjotr Jan )

i=0;
for e in strlistarray1
do
   targetarray[$e]="${strlistarray2[$i]}"
   ((++i))
done

#wanted output 
echo ${targetarray[aka1]}  -> Thoralf

exit

我希望现在更清楚了

$e 保留在 $e 上,它没有填充 strlist1 数组中的字符串

具有手动设置功能但不支持循环 bash 版本是 4.3

#!/bin/bash

unset aaaa
declare -A aaaa

str1="hans"
str2="klaus"

aaaa[$str1]="online";
aaaa[$str2]="offline";

echo ${aaaa[$str1]}

答案1

这演示了如何使用两个简单数组和targetarray中的键和值填充和查询关联数组strlistarray1strlistarray2

#!/bin/bash

declare -a strlistarray1=( aka1 kaka hu3hu blabla )
declare -a strlistarray2=( Thoralf Mirkoslav Pjotr Jan )

declare -A targetarray

i=0
for e in "${strlistarray1[@]}"; do
    targetarray["$e"]="${strlistarray2[i]}";
    ((i++))
done

for e in "${!targetarray[@]}"; do 
    echo $e --- ${targetarray[$e]}
done

要获取文件的内容(假设每行一个条目),请尝试

IFS=$'\n'
declare -a strlistarray1=($(< yourfile))
unset IFS

要从 URL 获取数据,请尝试

IFS=$'\n'
declare -a strlistarray1=($(wget -qO - 'http://yoururl'))
unset IFS

IFS需要进行设置以避免获取包含空格的数据出现问题。如果您确定您的输入数据没有空格,就像您的问题一样,IFS则可以省略这两个语句。)

相关内容