두 개의 문자열이 있는 연관 배열

두 개의 문자열이 있는 연관 배열

[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는 strlist1 배열의 문자열로 채워지지 않은 $e에 남아 있습니다.

수동 설정 기능 있음그러나 루핑은 지원되지 않습니다. 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이 두 문을 생략할 수 있습니다.)

관련 정보