Hallo zusammen, ich möchte gerne, den Inhalt einer Variable, die in einer gesourceten config steht. Dabei soll allerdings der Variablenname ebenfalls in einer Variable stehen. Ist das möglich, wenn ja wie?
Mit freundlichen Grüßen
Snycs
Anmeldungsdatum: Beiträge: Zähle... |
Hallo zusammen, ich möchte gerne, den Inhalt einer Variable, die in einer gesourceten config steht. Dabei soll allerdings der Variablenname ebenfalls in einer Variable stehen. Ist das möglich, wenn ja wie? Mit freundlichen Grüßen Snycs |
||
Anmeldungsdatum: Beiträge: 4436 |
Vielleicht eignen sich die Pakete confget und crudini dafür. |
||
Supporter, Wikiteam
![]() Anmeldungsdatum: Beiträge: 9775 Wohnort: Münster |
Indirekte Adressierung … (böse!). Geht in der Shell mit eval:
eval ist evil! Anfängern ist es verboten und kluge Fortgeschrittene benutzen es aus eigener Einsicht nicht. |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 5 |
|||
Supporter, Wikiteam
![]() Anmeldungsdatum: Beiträge: 9775 Wohnort: Münster |
Das hängt ab von der Programmaufgabe und den eigenen Programmierfähigkeiten und ist daher nicht allgemein zu beantworten. Man sollte komplizierte Techniken wie diese nach Möglichkeit meiden. Manchmal geht es nicht anders, oft aber eben doch. Und böse ist es, weil man sich mit solchen Tricks selber Knoten ins Hirn macht! |
||
Anmeldungsdatum: Beiträge: 11267 Wohnort: München |
Das hängt vom genauen Problem an - man kann z.B. mit einem case-Statement arbeiten, wenn vorab bekannt ist, welche Namen die zweite Variable haben darf:
Wenn man die Knoten im Hirn als Argument mal weglässt, ist das generelle Problem bei eval, dass jemand das u.U. dazu nutzen kann um ungewollt Code auf deinem System auszuführen - z.B.: # in der Konfigurationsdatei fruit='`rm ~/foo; echo apple`' apple='#FF0000' banana='#FFFF00' orange='#FFA500' # in deinem Skript color="$(eval echo $fruit)" Solange man nicht darauf vertrauen kann, dass einem da niemand ungewollt etwas in einer Konfigurationsdatei oder Umgebungsvariable unterschiebt, ist eval also nicht unbedingt das was man nutzen will. |
||
![]() Anmeldungsdatum: Beiträge: 7174 Wohnort: Wolfen (S-A) |
Ich bin mir nicht ganz sicher, ob ich das richtig verstanden habe: Ja, sowas geht, das nennt sich indirekte Variablen-Expansion: track@track:~$ var=obst track@track:~$ obst=Apfel track@track:~$ echo ${!var} Apfel ... geht bei der Shell aber nur in einem recht eng begrenzten Rahmen. Wie meine Vorredner schon sagten:
LG, track |