PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : expanding entered string



oler
29-07-2004, 15:22
Hi,

I've a problem expanding an entered string
When I enter a text, including a word like an environment I want to expand this environment before echoing the whole input.

Anyone an idea?

You can see the problem following next short inputs:



read a; echo $a // cmd to be entered
test $USER test // enter the data for a
test $USER test // output from the system

I want an output like
test root test

peschmae
29-07-2004, 15:45
Ich verstehe die Frage nicht ganz. Was soll das Zeugs genau machen?

MfG Peschmä

oler
29-07-2004, 16:09
Also,

ich möchte eine String von der Konsole einlesen und in einer Umgebungsvariable speichern.( z.B. read a)

In dem String den ich eingebe ist eine Wort, das mit einem Dollarzeichen beginnt. Dieses Wort soll für sich eine existierende Umgebungsvariable darstellen. (z.B: test $USER test)

Nun möchte ich den eingelesenen String ausgeben, dabei aber den Teil mit der eingegebenen Umgebungsvariablen expandieren.
(also $USER --> nach oler und damit Ausgabe von test oler test)

Ich hoffe jetzt ist es verständlich :-)

oler

peschmae
29-07-2004, 17:54
Ja, jetzt ists klar. Dass da zwei gleiche Zeilen nacheinander waren hat mich irritiert. Und dass du da "test" verwendet hast erst recht (ich dachte du willst was mit dem Programm "test"... :D)

Der wichtige Punkt ist: Variablen werden von der Bash interpretiert. Allerdings - wie du gesehen hast - geschieht dies nicht rekursiv. Nix da mit Variablen in Variablen. Deshalb führst du einfach eine Bash aus, die als auszuführendes Argument den Inhalt von $a kriegt (d.h. die Shell in der du die ganze Zeit bist ersetzt bei dem Aufruf $a durch "irgendwas $USER mit $HOME blubb" - die zusätzlich ausgeführte Bash interpretiert das dann...



read a; echo $a
bash -c "echo $a"


MfG Peschmä

fork
29-07-2004, 20:30
Das Kommando eval ist auch dafuer da:


read a
echo $a
eval echo $a


man bash/man eval:

eval [arg ...]
The args are read and concatenated together into a
single command. This command is then read and exe*
cuted by the shell, and its exit status is returned
as the value of eval. If there are no args, or
only null arguments, eval returns 0.