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:

  1. 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 !!!

  2. 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


  3. 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.

  4. 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

  5. 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

  6. links:

    http://www.thegeekstuff.com/2010/06/bash-array-tutorial/