Bash/Scripting/Arrays

Aus SchnallIchNet
Wechseln zu: Navigation, Suche

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}]}

siehe auch

  1. tldp.org