November 2011 Archives
2011-11-30 22:15:57
Indirekte Variablenzuweisung mit "eval"
Das Shell-Builtin "eval" bewertet Ausdrücke bzw. führt Befehle aus. Einfaches Beispiel:
$ unset A $ echo $A $ eval A=1 $ echo $A 1
Da die Shell vor Ausführen von eval wie auch bei jeder anderen Kommandozeile erst die üblichen Ersetzungen (Variablen, Commands etc.) macht, kann man auch folgendes machen:
$ B=A $ eval $B=2 $ echo $A 2
Und wenn man ganz verrückte Sachen machen will, wie beispielsweise in einem Script mehrere Variablen in einer Schleife auf die gleiche Weise zu verändern, dann sieht das so aus:
$ U=a $ for i in U;do eval $i=\"\$$i X\";done;echo $U a X $ for i in U;do eval $i=\"\$$i X\";done;echo $U a X X $ for i in U;do eval $i=\"\$$i X\";done;echo $U a X X X