Variablenname dynamisch generieren? Richtiges Quoting?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von don_corleone, 17.10.2006.

  1. #1 don_corleone, 17.10.2006
    don_corleone

    don_corleone Guest

    Hallo,

    ich denke, das ist eigentlich ne ganz einfache Aufgabe, wusste jedoch nicht wirklich, wonach ich suchen soll.

    Also ich habe die Variable $TEXT_1, $TEXT_2 und $X. Die 2 Textvariablen sind mit verschiedenen Texten befüllt und $X enthält entweder 1 oder 2.

    Wie kann ich mir jetzt "dynamisch" eine der 2 Textvariablen ausgeben lassen?

    Code:
    echo $TEXT_$X
    funktioniert natürlich nicht. Wie muss man das quoten?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Code:
    TEXT=TEXT_$X
    echo ${!TEXT}
    
     
  4. #3 don_corleone, 17.10.2006
    don_corleone

    don_corleone Guest

    Danke für deine Hilfe, ich dachte einfach, dass ginge in einer Zeile.

    Für was steht bei dir das Rufzeichen in der 2. Zeile?
     
  5. #4 Wolfgang, 18.10.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Für mich sieht es so aus, als ob du hier etwas einfach benutzt ohne wirklich zu verstehen warum.
    Also schau dir doch bitte mal die Variablenexpansion an.
    Stichwort: indirekte Expansion
    Dann solltest du verstehen. ;)

    Gruß Wolfgang
     
  6. #5 don_corleone, 18.10.2006
    Zuletzt von einem Moderator bearbeitet: 18.10.2006
    don_corleone

    don_corleone Guest

    Danke für den Link.
    Du hast recht, aber auch wieder nicht recht.
    Ich habe nämlich das ganze nicht benutzt, da ich es nicht verstanden habe. Deshalb hab ich ja nochmal nachgefragt.

    EDIT: Ist so eine indirekte Expansion auch in der Korn Shell möglich? Finde leider nichts dazu.
     
  7. #6 Wolfgang, 18.10.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Das ist dein gutes Recht.
    Ich hoffe du hast es nun verstanden, und kannst es benutzen. ;)

    Gruß Wolfgang
     
  8. #7 don_corleone, 18.10.2006
    don_corleone

    don_corleone Guest

    Ja, verstanden schon, aber:

     
  9. #8 Wolfgang, 18.10.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Warum probierst du es nicht einfach aus, ob deine Korn-Shell das kann?
    Meine Glaskugel kennt deine Version ja nicht.
    Ich kann es für dich nicht testen, da ich keine ksh hier habe.
    Weiter Infos kann dir aber sicher deine Manpage dazu sagen.

    Darum merke: Immer die verwendete Shell mit angeben!

    Gruß Wolfgang
    PS Deine Änderung des Beitrages kam nach meinem Posting, deshalb konnte ich nicht darauf eingehen.
     
  10. #9 don_corleone, 18.10.2006
    Zuletzt von einem Moderator bearbeitet: 18.10.2006
    don_corleone

    don_corleone Guest

    - Ich habe es ja ausprobiert und folgenden Fehler bekommen:
    Code:
    ${!TEXT}: The specified substitution is not valid for this command.
    - Deshalb habe ich nochmal hier gefragt.
    - Ich habe am Anfang vergessen, die Korn Shell anzugeben, deshalb habe ich das editiert und werde das zukünftig gleich mitangeben. Dir hätte ich jedoch extra eine PM geschickt, dass ich meinen Beitrag geändert habe.

    Du unterstellst mir laufend irgendwas mit deinen Postings!
    Freundlicher wäre es, wenn du vor deinen Postings mal dran denken würdest, dass sich vielleicht nicht alles so abgespielt hat, wie von dir behauptet. Erst denken - dann sprechen (posten).
     
  11. #10 neutrino1, 18.10.2006
    neutrino1

    neutrino1 Mitglied

    Dabei seit:
    03.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    mit ksh88

    hi!

    falls du auch mit der ksh88 arbeiten mußt, dann ist wohl das die lösung:
    Code:
    eval echo $"TEXT_${T}"
    ciao
     
  12. #11 don_corleone, 18.10.2006
    don_corleone

    don_corleone Guest

    Danke für den Tipp. ksh88 kenne ich leider nicht.
    Wie kann ich denn feststellen, welche ksh ich genau verwende?

    Wenn ich das so mache:
    Code:
    X=1
    TEXT_1="Hallo"
    eval echo $"TEXT_{$X}"
    Bekomme ich als Ausgabe leider nur:
    Code:
    {1}
    Also den Wert von X in geschweiften Klammern.
    Evtl. ne andere Möglichkeit?
     
  13. #12 neutrino1, 18.10.2006
    neutrino1

    neutrino1 Mitglied

    Dabei seit:
    03.05.2005
    Beiträge:
    30
    Zustimmungen:
    0
    hi!

    zu 1. tipp auf der cmd einfach mal gleichzeitig die Tasten Strg und v
    zu 2. die öffnende geschweifte klammer steht nach dem dollar (du kannst aber diese klammern auch weg lassen)

    ciao
     
  14. #13 Wolfgang, 18.10.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Dann hat sich doch deine Frage bezüglich dieser Syntax von selbst beantwortet.
    Ich habe weder Ahnung welche Korn Shell du verwendest, noch ob deine Version dafür einen Ersatz bietet.
    Auch ich bin nicht rund um die Uhr hier eingeloggt. Als ich kam, fand ich dein Posting editiert, und du wiederholst die Frage mit deinem editierten Text (der in meinem Posting ja nicht berücksichtigt werden konnte.) Eine PM hatte ich bis da noch nicht gelesen.
    Wo ich da etwas unterstelle erklärt sich mir nicht.
    Aber ok. Das Thema ist für mich vom Tisch.

    Zum Thema:
    Eventuell ist aber dein Ansatz schon nicht der richtige.
    Erfahrungsgemäß sind indirekte lexikalische Variablenauflösung immer vermeidbar und irgendwie (sorry for) Murks.
    Verwende doch einfach ein Array und greife auf den Index zu.
    Das sollte dann auch mit allen Shell die einigemaßen POSIX-Konform sind laufen.

    Gruß Wolfgang
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 don_corleone, 18.10.2006
    don_corleone

    don_corleone Guest

    Ok, finde auch wir sollte da nicht streiten!
    Bin ja für eure Hilfe sehr dankbar!

    @ neutrino1: Danke jetzt funktionierts.

    Aber was genau soll Strg + V bewirken? Bekomme keine Ausgabe.
    Könnte ich so die feststellen welche Korn Shell?

    Das wäre hilfreich, denn dann wüsste ich auch, welche Doku ich mir bzgl. den Arrays durchlesen müsste bzw. habt ihr vielleicht wieder einen guten Link?
     
  17. #15 Wolfgang, 18.10.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    <STRG>+<V> bewirkt, dass die eingegebenen Zeichen nicht von der Shell interpretiert werden.
    Das bedeutet z.B. ein <TAB> bleibt ein TAB und kann so z.B. auch in sed als Suchstring eingeben werden.
    Welches OS hast du denn?
    Eventuell sagt dir ja auch dein Paketmanagement deines Systems welche Version und was du nutzt.

    Falls deine ksh nicht total veraltet ist, sollte die Verwendung von Arrays fast gleich der von der Bash sein.

    Siehe obigen Link.
    Code:
    $ A[0]=10; A[1]=20; i=0;echo "${A[$i]}" 
    10
    
    Gruß Wolfgang
     
Thema: Variablenname dynamisch generieren? Richtiges Quoting?
Besucher kamen mit folgenden Suchen
  1. shell dynamisch variable

Die Seite wird geladen...

Variablenname dynamisch generieren? Richtiges Quoting? - Ähnliche Themen

  1. $_POST['Variablenname'] in Shell Script verwenden

    $_POST['Variablenname'] in Shell Script verwenden: Hi leute, ich versuche z.Z. eine POST Variable aus einem formular aus einem html script an eine .sh datei zu übergeben. Das wenn ich z.b. touch...
  2. dynamische Speicherreservierung

    dynamische Speicherreservierung: [gelöst] dynamische Speicherreservierung Hallo, Unixboardler! Ich hab ein kleines Projekt am laufen und muss dafür wissen, wie ich zur...
  3. shared object (.so) dynamisch nachladen

    shared object (.so) dynamisch nachladen: hallo zusammen, ich habe ein shared-object (.so) und möchte das in mein executable so mit hineinlinken, dass es erst geladen wird wenn eine...
  4. [PHP] Tabellen dynamisch aktualisieren/nachladen mittels AJAX

    [PHP] Tabellen dynamisch aktualisieren/nachladen mittels AJAX: Hallo! Ich arbeite derzeit an einem in PHP realisiertem Web-Projekt. Ich würde gerne mittels AJAX eine Ausgabetablle (enthält Daten einer MySQL...
  5. sed: String in Datei dynamisch erweitern.

    sed: String in Datei dynamisch erweitern.: Hallo. Ich habe mehere Dateien, welche eine Zeile mit "ID = 123" enthalten. Diese Zeile muss geändert werden. Die angegebene ID soll immer auf...