LX-SCR-INFO-array-variabelen
updated aug/01/2010 18:05
array variabelen
Een array is een variabele met één naam die verschillende elementen bevat, een lijst. Die elementen worden genummerd met een index.
In bash heeft een array maar 1 dimensie. De index begint vanaf
0.
Toewijzen van data aan een array kan op verschillende manieren:
- alles tegelijk:
Je kan de volgende commando's rechtstreeks intikken zonder een script te schrijven:
$ dagen=( maandag dinsdag woensdag donderdag vrijdag zaterdag zondag )
$ echo ${dagen[1]}
dinsdag
$ echo ${dagen[0]}
maandag
$ echo ${dagen[6]}
zondag
Hou er rekening mee dat de array index begint bij 0 !!!
- element per element:
Je kan ook hier de volgende commando's rechtstreeks intikken zonder een script te schrijven:
$ maand[1]=januari
$ maand[2]=februari
$ maand[3]=maart
$ for i in 1 2 3 ; do echo ${maand[$i]}; done
januari
februari
maart
- enkele elementen:
En ook hier kan je de volgende commando's rechtstreeks intikken zonder een script te schrijven:
$ warme_jaren=( [1]=2006 [2]=2003 [3]=1999 [7]=1989 [12]=1976 )
$ for i in 1 2 3 4 5 6 7 8 9 10 11 12 ; do echo ${warme_jaren[$i]}; done
2006
2003
1999
1989
1976
Je kan alle drie de toewijzingsmethoden altijd door mekaar gebruiken.
- Een educatief voorbeeld:
#!/bin/bash
#
# shuffle_dagen: als de eerste dag, de maandag is en met 1 moet beginnen
# verder heeft dit script geen enkel nut
#
dagen=( maandag dinsdag woensdag donderdag vrijdag zaterdag zondag )
for i in 7 6 5 4 3 2 1
do
dagen[i]=${dagen[i-1]}
done
dagen[0]=zero
for i in 1 2 3 4 5 6 7; do echo $i ${dagen[i]}; done
Met als output:
$ shuffle_dagen
1 maandag
2 dinsdag
3 woensdag
4 donderdag
5 vrijdag
6 zaterdag
7 zondag
- extra informatie halen uit een array:
${array[*]} # Alle elementen in de array
${array[@]} # Alle elementen uit de array, maar denk aan het verschil
# tussen $* en $@ in gebruik met functies
${!array[*]} # Alle indexen in de array
${#array[*]} # Aantal elementen in de array
${#array[0]} # Lengte van element nul
Ook hier kan je de volgende commando's weer rechtstreeks intikken zonder een script te moeten schrijven:
$ warme_jaren=( [1]=2006 [2]=2003 [3]=1999 [7]=1989 [12]=1976 )
$ echo ${warme_jaren[*]}
2006 2003 1999 1989 1976
$ echo ${!warme_jaren[*]}
1 2 3 7 12
$ echo ${#warme_jaren[*]}
5
$ echo ${#warme_jaren[1]}
4
$ for jaar in ${warme_jaren[@]} ; do echo $jaar ; done
2006
2003
1999
1989
1976
- links:
http://www.thegeekstuff.com/2010/06/bash-array-tutorial/