2つの文字列を持つ連想配列

2つの文字列を持つ連想配列

[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これは、2つの単純な配列のキーと値を使用して連想配列を埋め、クエリする方法を示しています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

ファイルの内容を取得するには(1行に1つの項目を想定)、次のようにします。

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

URLからデータを取得するには:

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

IFS空白を含むデータを取得する問題を回避するには、この設定が必要です。質問のように入力データに空白がないと確信している場合は、IFSこれら2つの文を省略できます。)

関連情報