Bash Variablennamen zusammensetzen



  • Hallo Forum,

    ich habe unterschiedliche Mengen an Eingabeparametern für ein Bash Skript. Ist $1 mit 1 belegt soll der erste Datensatz genommen werden, bei $2=2 der zweite, ...

    Namen1 = "Albert", "Mia", "Franz", "Sabine"
    Namen2 = "Mulli", "Miriam", "Fal", "Sai"

    NamesArray = (${Namen$1})

    Im Internet steht ich müsse ! davor schreiben um die Variable neu zu interpretieren. Es funktioniert aber trotzdem nicht?
    Alternativ: Kann ich auch irgendwie ein Namensarray mit mehreren Strings erstellen?

    Vielen Dank

    Tim



  • eval echo \$Namen$1



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Themen rund um den PC in das Forum Rund um die Programmierung verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Danke Rüdiger 🙂



  • rüdiger schrieb:

    eval echo \$Namen$1

    Das ist eine sehr gefährliche Lösung.

    Folgendes Skript nenne ich foo.sh:

    #!/bin/bash
    
    Namen1="eins"
    Namen2="zwei"
    
    echo "Mit Hilfsvariable..."
    indirect=Namen$1
    echo "${!indirect}"
    
    echo "Mit eval..."
    eval echo \$Namen$1
    

    Ausführen:

    $ % ./foo.sh 1
    Mit Hilfsvariable...
    eins
    Mit eval...
    eins
    $ % ./foo.sh 2
    Mit Hilfsvariable...
    zwei
    Mit eval...
    zwei
    $ ./foo.sh '$(date)'
    Mit Hilfsvariable...
    
    Mit eval...
    Tue Jun 29 23:14:12 CEST 2010
    $
    

    Wie die letzte Zeile zeigt, handelst du dir damit Sicherheitslücken ein.
    Du kannst Variablen mit der Form ${!indirect} referenzieren, aber dafür musst du eine Hilfsvariable anlegen, sonst geht das nicht. Ich würde aber auf jeden Fall eval vermeiden, wenn möglich.


Log in to reply