Anzeige:
Ergebnis 1 bis 6 von 6

Thema: Frage zu Arrays in bash

  1. #1
    Registrierter Benutzer
    Registriert seit
    25.05.2000
    Ort
    Friedrichsfeld
    Beiträge
    42

    Question Frage zu Arrays in bash

    Hallo,

    ich würde gern wissen, ob es möglich ist mehrstufige Arrays in einem Bash-Script zu verwenden?


    Zur Zeit habe ich einen einstufigen Array (class_name[$counter]), der in einer Schleife gefüllt wird. Jetzt brauche ich aber eine zweite Instanz, bekommen dass aber nicht hin.

    Weiss einer von euch, ob das überhaupt und wenn wie geht?
    Sollte dann irgendwie so aussehen:
    class_name[[$counter]$sub_count]


    Vielleicht habt ihr ja nen Tip.

    Thx Björn
    Geändert von netlinker (29-06-2005 um 19:07 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.05.2000
    Ort
    Friedrichsfeld
    Beiträge
    42

    Question

    Hallo,

    leider gibt's ja noch nichts zu meiner Anfrage.

    Eigentlich würde mir auch ein einstufiger Array reichen, jedoch müsste ich dann den Variablen-Namen dynamisch Vergeben können.

    Ich werde nicht mehr als 8 classen haben, für die ich aber die Werte in einem Array brauche. Problem hier ist halt, dass die Class_names dynamisch ausgelesen werden und dann dafür die Werte ermittelt werden.

    Geht es den, dass der Variabelen-Name eine andere Variabele ist?

    etwa so $class[$counter]="wert"

    Komme hier leider nicht weiter, vielleicht habt ihr ja nen paar tips.

    mfg Björn


    Hier noch nen paar Sachen die ausprobiert habe.
    # class=klasse1
    # $class=(1 2 3)
    bash: klasse1=(1 2 3): command not found
    # declare -a $class=(1 2 3)
    # declare -a $class[10]=111
    bash: declare: klasse1: cannot assign to array variables in this way
    # echo ${klasse1[@]}
    1 2 3

    zsb-ip03:/opt/ftp-saver/sonstiges # echo ${class[@]}
    klasse1
    # echo ${${class}[@]}
    bash: ${${class}[@]}: bad substitution
    Geändert von netlinker (29-06-2005 um 19:07 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    25.05.2000
    Ort
    Friedrichsfeld
    Beiträge
    42

    Question

    Hi,

    so langsam bin ich jetzt verzweifelt

    Ich habe es zwar jetzt hinbekommen den Variabelen-Name dynamisch zu vergeben, kann die Werte aber nicht auslesen.

    variname="St$vari1" #Da vari1 nen integer
    variwert=1666455657286

    # Den array auslesen und mit neuen Wert neu schreiebn, da sonst alle Daten verloren werden
    declare -a $variname='($(declare -p $variname | cut -d "(" -f2 | cut -d ")" -f1 | sed s/\"//g) [$counter]=$variwert)'

    Das einzige bei dem ich nen Ausgabe bekamm.
    # =1666455657286
    echo $[$variname[$counter]]
    8346438

    Ich probiere gerade auch:

    array=$(declare -p $variname) #Ganzer Array
    declare -a St12121='([1]="1666455657286" [2]="1666455657286" [11]="1666455657286")'

    last_value=$(echo ${array##*\[$counter-1\]=} | cut -d \" -f1)

    nur hier klappt das $counter-1 oder $counter allein net. Wenn ich eine 1 oder 2 per Hand eintrage gehts, aber der Wert kommt ja aus ner Schleife

    Hat vielleicht no jemand einen Tip??

    Bye Björn
    Geändert von netlinker (29-06-2005 um 19:07 Uhr)

  4. #4
    Registrierter Benutzer Avatar von Hans-Georg Normann
    Registriert seit
    04.03.2000
    Ort
    Uetersen
    Beiträge
    571
    Schauen wir einmal nach:
    Zitat Zitat von man bash
    Arrays
    Bash provides one-dimensional array variables.
    Das erklärt doch einiges oder? Bei awk hast du das gleiche Problem.

    Abhilfe würde z. B. Python schaffen.

    Hans
    333 Mhz, 466 MHz, neee, ich hab was neues zuhause.....

  5. #5
    shark
    Gast

    arrays

    Leider kann man in bash/korn shell etc ... keine 2-dimentional arrays nutzen. Aber du kannst als element von eine array ein array haben. Ich weiss es nicht was du genau machen willst aber vielleicht hilft das :

    Code:
    root@ssh1:/tmp# xxx[1]=a
    root@ssh1:/tmp# yyy[1]=${xxx[1]}
    root@ssh1:/tmp# echo ${yyy[1]}
    a
    Gruss,
    Shark

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.05.2000
    Ort
    Friedrichsfeld
    Beiträge
    42

    Wink

    Hi Danke für eure Hilfe.

    Habe jetzt eine Lösung gefunden, mit der ich mein Problem lösen konnte.

    Ich interpretiere jetzt einen Zweidimensionalen Array:
    Code:
    zweidim_array[zeile][spalte] =eindim_array[zeile*Spaltenanzahl+spalte]
    Vobei Spaltenanzahl die max. Spaltenanzahl ist.

    Was auch geht ist, das der Name des Arrays dynamisch vergeben wird:
    Code:
    varname="irgendwas"                # Varname deklarieren
    eval $varname[$counter]="wert"     # Wert in Array schreiben
    eval echo \${$varname[$counter]}   # Ausgabe Array Wert
    Geändert von netlinker (08-07-2005 um 13:13 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •