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: 4450 |
Vielleicht eignen sich die Pakete confget und crudini dafür. |
||
|
Supporter, Wikiteam
Anmeldungsdatum: Beiträge: 9837 |
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: Zähle... |
|||
|
Supporter, Wikiteam
Anmeldungsdatum: Beiträge: 9837 |
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: 11278 |
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 |
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 |