Bash: Variablen deklarieren anhand Inhalt andere Variablen??

  • Hi,


    ich weiß das es irgendwie möglich ist, aber wie??


    In einer Variable steht ein Name. Es soll nun eine Vaiable deklariert werden mit genau diesem Namen der ich wiederrum einen Wert zuweisen kann.
    Beispiel:


    $Var1=VarName


    #Zuweisung, irgendwie: $$Var1=TestValue


    Ergebnis:
    echo $VarName
    --> TestValue


    Weiß jemand wie das geht oder hat einen entsprechenden Link parat??


    gruss
    Tobias

    :vdr1 VDR User #626:fans
    VDR II: YeongYang A106, Fusi D1522, Celeron 2GHz, Frontend per DVB-s FF, 2xDVB-c, ATRIC-IR, YaVDR 0.3a
    VDR III HDTV: Inter-Tech 2008V mit iMonLCD, Atric, ASRock Extreme3 770 AM3, AMD Sempron 140 1x 2.70GHz AM3, 1,5TB WD15EADS, 2TB WD20EARS, 2x4GB DDR3-1600, NVidia GT520 passiv, 3x DVB-c, YaVDR 0.5 @ Samsung PS-50B550

  • Code
    Var1=VarName
    eval $(echo $Var1=Testvalue) 
    echo $VarName
  • Darf ich mal fragen wofür das nützlich sein kann? Hab da gerade nichts vor Augen.


    Gruß
    Martin

    Hat mein Neffe abgestaubt:


    Gen2VDR auf Asus M2A-VM/Sempron LE-1100 mit TT-FF und Skystar2 in Thermaltake "Mozart"


    Aktuell: WIRD ERGÄNZT

  • Zitat

    Original von uetzguer

    Code
    Var1=VarName
    eval $(echo $Var1=Testvalue) 
    echo $VarName


    Danke, das wars...


    Soetwas braucht man zb. wenn man SteuerVariablen und deren Inhalte in einer Datenbank definiert.

    :vdr1 VDR User #626:fans
    VDR II: YeongYang A106, Fusi D1522, Celeron 2GHz, Frontend per DVB-s FF, 2xDVB-c, ATRIC-IR, YaVDR 0.3a
    VDR III HDTV: Inter-Tech 2008V mit iMonLCD, Atric, ASRock Extreme3 770 AM3, AMD Sempron 140 1x 2.70GHz AM3, 1,5TB WD15EADS, 2TB WD20EARS, 2x4GB DDR3-1600, NVidia GT520 passiv, 3x DVB-c, YaVDR 0.5 @ Samsung PS-50B550

  • Man sollte sich aber darüber klar sein, dass das himmelweite Sicherheitslöcher reißt. Ein einfaches Var1="echo Hallo Welt;x" zeigt das Potenzial, von da zur Netzwerk-Shell ist es nicht weit.


    Genauso unsicher, aber wenigstens stilistisch sauber, ist die oben verlinkte Lösung:
    eval "$Var1=\$Value"


    Die dort auch vorgeschlagene read-Lösung motzt wenigstens:
    IFS= read -r "$Var1" <<< "Testvalue"


    Aber auch das Setzen von beliebigen Shell-Variablen ist nicht ganz ohne, da bieten sich viele Möglichkeiten, um bei passender Gelegenheit Code ausführen zu lassen, in dem die Shell ersetzt, der PATH manipuliert, oder ein PROMPT_COMMAND hinterlegt wird, etc. Eine solide Lösung sollte nur bekannte, vorgegebene Variablen übernehmen können:


    case "$Var1" in
    foo) foo="$Value";;
    bar) bar="$Value";;
    esac


    Gruß,


    Udo

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!