array associativo com duas strings

0

é possível fazer o loop de um array simples com chave e valor com uma string na parte [chave]?

#!/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

espero que agora seja mais claro

$ e permanece em $ e não é preenchido com a string da matriz strlist1

com a configuração manual funciona mas não com loop versão bash é de 4,3

#!/bin/bash

unset aaaa
declare -A aaaa

str1="hans"
str2="klaus"

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

echo ${aaaa[$str1]}
    
por Gorgone Impertinence 20.04.2016 / 19:14

1 resposta

5

Isso demonstra como preencher e consultar uma matriz associativa targetarray com chaves e valores de duas matrizes simples strlistarray1 e 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

Para buscar o conteúdo de um arquivo (assumindo uma entrada por linha), tente

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

Para buscar dados de um URL, tente

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

(A configuração IFS é necessária para evitar problemas com dados buscados contendo espaços. Se você tiver certeza de que seus dados de entrada não possuem espaços, como em sua pergunta, as duas declarações IFS podem ser omitidas). / p>     

por 20.04.2016 / 22:49