是否可以使用 [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
中的键和值填充和查询关联数组strlistarray1
:strlistarray2
#!/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
则可以省略这两个语句。)