Variablenname dynamisch generieren? Richtiges Quoting?

D

don_corleone

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?
 
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?
 
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?

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
 
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
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.
 
Zuletzt bearbeitet von einem Moderator:
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.
 
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.
- 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).
 
Zuletzt bearbeitet von einem Moderator:
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
 
falls du auch mit der ksh88 arbeiten mußt, dann ist wohl das die lösung:
Code:
eval echo $"TEXT_${T}"
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?
 
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
 
- 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.
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.
- 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).

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
 
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?
 
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
 
Danke für die Antwort!
Gibts auch mehrdimensionale Arrays? Fand leider nichts dazu.
 

Ähnliche Themen

Automatisierung via Netzwerk funktioniert nicht richtig

Löschroutine mit Überprüfung

Raid5 Controller gesucht

while-Bedingung wird nicht (richtig) überprüft?

Inhalte in Datei einfügen

Zurück
Oben