[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
이 두 문을 생략할 수 있습니다.)