Bash/Scripting/Arrays
Aus SchnallIchNet
Inhaltsverzeichnis
array definieren
declare -a FOO
or
FOO[2] = 'bar'
array benutzen
echo {$FOO[2]}
iterieren
#!/bin/sh FOO=( bar string 'some text') foonum=${#FOO[@]} for ((i=0;i<$foonum;i++)); do echo ${FOO[${i}]} done # or use [@] to get a space-seperated list of elements: echo ${FOO[@]}
achtung bei der schreibweise ${FOO[@]} in verbindung mit for-schleifen:
for elem in ${FOO[@]}; do
wird das 3. element des arrays als 2 elemente behandeln, da die hochkommatas verloren gehen!!!
die schleife wird also 4 mal durchlaufen.
die schreibweise:
for ((i=0;i<$foonum;i++)); do
verhindert dies!!!
achtung, ich hatte hier einen fehler drinne...
zuerst hatte ich die anzahl der array-elemente mit:
${#FOO}
gezaehlt. dies war falsch!!!!
obige schreibweise zaehlt die anzahl der zeichen im ERSTEN array-element!!
um die korrekte anzahl der elemente zu bekommen ist die schreibweise:
${#FOO[@]}
string=abcABC123ABCabc echo ${string[@]} # abcABC123ABCabc echo ${string[*]} # abcABC123ABCabc echo ${string[0]} # abcABC123ABCabc echo ${string[1]} # No output! # Why? echo ${#string[@]} # 1 # One element in the array. # The string itself.
assoziatives array
declare -A FOO
FOO['huetzel']=gruetzel
or
HLP=huetzel; FOO[${HLP}]=gruetzel;
assoziatives array benutzen
echo ${FOO['huetzel']}
or
HLP=huetzel; echo ${FOO[${HLP}]}