Tabellen in der bash

Tabellen werden in der bash definiert mit :
   declare -a  name
   declare name[subscript]   subscript wird ignoriert
oder
   typeset -a name 


  • die Tabellenlänge ist nicht limitiert
  • Beim Ansprechen muß der Name in braces { } gesetztwerden, um Konflikte mit Pfadnamenexpandierung zu vermeiden
  • Beispiel:
         declare -a tab
         typeset -i index
         ${tab[index]}
    
  • der Index ist eine Integer und wird ohne $ angegeben
  • ${name[subscript]} Inhalt Element an Position subscript
  • ${name[*]} Inhalt letztes Element
  • ${name} Inhalt erstes Element
  • ${#name[*]} Anzahl gesetzte Elemente (nicht grösster Index)
  • ${#name[subscript]} Länge Tabellenelement an Position subscript
  • name[subscript]=value Zuweisung
  • name=([subscript]=value ... [index]=value) Zuweisung
  • unset name[subscript] löscht angegebenes Tabellenelement
  • unset name löscht gesamte Tabelle
  • unset name[*] löscht gesamte Tabelle
  • unset name[@] löscht gesamte Tabelle
  • #!/bin/bash
    #declare [-afFirtx] [-p] [name[=value]]
    #typeset [-afFirtx] [-p] [name[=value]]
    #typeset     attributes:
    #              -a     Jeder name ist eine array variable.
    #              -f     Nur function names.
    #              -F     Verhindert Ausgabe der Functiondefinition, nur der
    #		     Name und die ttribute werden ausgegeben
    #              -i     Die Variable wird als Integer behandelt. Wenn der
    #                     Variablen ein Wert zugewiesen wird, wird ein eine
    # 	 	     arithmetische Auflösung vorgenommen.
    #              -r     Der Name wird  readonly gesetzt. Danach können der
    #                     Variablen keine Werte mehr zugewiesen werden.
    #                     D.h. eine Anfangswertvergabe muss gleichzeitig oder
    #		     vorher erfolgen.
    #                         typeset -ir  max=50
    #              -t     Gibt jedem name das trace attribute.  Traced functions
    #		     erben die DEBUG trap von der aufruefenden  shell.
    #                     Das  trace attribute ist nur für Functions
    #                     wichtig und hat keine Bedeutung fuer einfache Variablen.
    
    typeset -a tab1  tab2
    typeset -i i=0 n=0
    function show_tab1 {
       i=0
       n=${#tab1[*]}
       while (( i < n ))
       do
         echo "tab1[$i]="${tab1[i]}
         ((i = i +1))
       done
    
    }
    function show_tab2 {
       i=0
       p=0
       n=${#tab1[*]}
       while (( p < n ))
       do
       echo $i "  " $p "  " $n
       set -x
         if [ "${tab1[i]}" != ""   ]
          then
            echo "tab1[$i]=${tab1[i]}"
            (( p=p+1 ))
         fi
    set +x
         cont
         ((i = i +1))
       done
    }
    
    cont()
    {
       echo -n " "
       read dummy
    
    }
    
    tab1[5]="hallo"
    echo ${tab1[*]}
    echo ${#tab1[*]}
    
    tab1[6]="next"
    echo ${#tab1[*]}
    show_tab1
    echo " --------------------------"
    show_tab2