Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Variablen-Zuweisung in der Bash

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Mic_2004
Gast





BeitragVerfasst am: 22. Nov 2004 14:24   Titel: Variablen-Zuweisung in der Bash

COUNT=1
VAR${COUNT}="xyz"

bash: VAR1=xyz: command not found

Warum wird hier versucht ein Kommando auszuführen und nicht der String xyz der Variablen VAR1 zugewiesen?

Das Ganze soll sich eigentlich in einer Schleife abspielen, so dass nach jedem Durchlauf die Variable VAR1, VAR2, VAR3 usw. hochgezählt wird.
Den Teil mit der Schleife, die ansonsten funktioniert, habe ich hier der Übersicht halber weggelassen.

Ich habe mit verschiedenen Arten des Quotens erfolglos experimentiert.

Kann mir jemand einen Tipp geben?
Habe ich einen grundsätzlichen Denkfehler?

Danke!
Gruß
Michael
 

df -h
Gast





BeitragVerfasst am: 22. Nov 2004 15:47   Titel:

VARIABLE="das istder inhalt"

oerr auch irgendwie so: VARIABLE=$("test")

oder in der shell wars glaub: export VARIABLE="var"
 

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 22. Nov 2004 19:45   Titel: Re: Variablen-Zuweisung in der Bash

Mic_2004 hat folgendes geschrieben::
Kann mir jemand einen Tipp geben?
Habe ich einen grundsätzlichen Denkfehler?
Ja und ja. Wink

Die Shell hat eine feste Reihenfolge, in der sie jede Eingabe abarbeitet. Sieh mal in die bash-Manpage unter "Simple Command Expansion" und "Command Execution". Das Auflösen des "=" als Variablenzuweisung findet früh statt. Da davor aber (zu dem Zeitpunkt) noch kein Variablenname steht ($ darf nicht Bestandteil des Namens sein), wird das Gleichheitszeichen hier nicht als "Zuweiung an Variable" gewertet. Später wird für $COUNT der ebtsprechende Wert zwar eingefügt, aber das Ergebnis inkl. Gleichheitszeichen und folgendem Wert als ein einziges Wort genommen, weil keine Blanks drinne vorkommen, und als erstes Wort der Kommandozeile versucht auszuführen.

Die einfache Lösung sind Arrays, die in der bash (oder der ksh oder der zsh) funktionieren:
Code:
for COUNT in 1 2 3 4 ; do VAR[$COUNT]="irgendwas" ; done
echo ${VAR[3]}
Genaueres findest Du in der bash-Manpage unter "Arrays".

Wenn es um Bourne-Shell-Kompatibilität geht, musst Du in den sauren Apfel beissen und eval verwenden:
Code:
for COUNT in 1 2 3 4 ; do eval 'VAR'$COUNT'="irgendwas"' ; done
echo $VAR3
eval zwingt die Shell in einen zweiten Lauf über die Kommandozeile mit allen Ersetzungen, die es da so gibt. In Lauf 1 wird $COUNT durch den Wert der Variablen ersetzt, alles weitere bleibt (da in Hochkommata) unverändert. Für den zweiten durchlauf steht da also

VAR3="irgendwas"

Und so wird die variable dann auch gesetzt. Das ganze ist m.E. schwer zu verstehen, fehleranfällig und schwer zu lesen, aber es funktioniert eben auch in der alten sh.

Hat das die Nebel gelichtet?

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Mic_2004
Gast





BeitragVerfasst am: 23. Nov 2004 11:02   Titel:

Hallo Jochen,

vielen Dank für die ausführliche Erklärung und die sehr anschaulichen Beispiele.

Ich habe mir die von Dir vorgeschlagene Array-Variante genauer angesehen und konnte damit mein Problem lösen und habe wieder etwas dazu gelernt. Smile

Vielen Dank nochmal!

Gruß
Michael
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy