Ich versuche, ein Skript in bash mit einem assoziativen Array zu schreiben. Ich habe eine Datei namens data
:Bash Lesen von einer Datei zu einem assoziativen Array
a,b,c,d,e,f
g,h,i,j,k,l
Das folgende Skript:
oldIFS=${IFS}
IFS=","
declare -A assoc
while read -a array
do
assoc["${array[0]}"]="${array[@]"
done
for key in ${!assoc[@]}
do
echo "${key} ---> ${assoc[${key}]}"
done
IFS=${oldIFS}
gibt mir
a ---> a b c d e f
g ---> g h i j k l
ich meine Ausgabe sein müssen:
a b ---> c d e f
g h ---> i j k l
Sie ein paar Verbesserungen könnte hinzufügen: 1. Put 'IFS =' für den 'read' Befehl und' IFS' Speichern nicht fummeln müssen und es die Wiederherstellung . 2. Fügen Sie in der Schleife '(($ {# array [@]}> = 2)) || hinzu weiter "oder etwas Ähnliches, um leere Zeilen loszuwerden. 3. Schreiben Sie Ihre Zuweisung als 'assoc [" $ {array [@] :: 2} "] = $ {array [@]: 2}'. –
@gniourf_gniourf, Ist '$ {array [@] :: 2}' Form von '$ {parameter: offset: length}' mit weggelassenem 'offset' und dann wird der' offset' als Null angenommen? – Ashkan
Ja, das stimmt! –