bash: parameter expansion wird nicht ausgegeben?

28/12/2009 - 16:35 von Magnus Warker | Report spam
Hallo,

ich habe eine Befehlszeile in einer Variablen aufgebaut:

c='rsync ${CFG_OPT} ${CFG_SRC}/ ${CFG_DST} > ${CFG_LOG}'

Die Ausführung des Befehls funktioniert bestens mit eval:

eval "$c"

Vorher möchte ich mir jedoch die komplette Befehlszeile anzeigen lassen. Das
habe ich so versucht:

echo "command: ${c}"

Dabei erhalte ich jedoch folgende Ausgabe:

command: rsync ${CFG_OPT} ${CFG_SRC}/ ${CFG_DST} > ${CFG_LOG}

Es wird also das String-Literal ausgegeben, ohne die verwendeten Variablen
zu evaluieren.

Wie kann man denn den String mit Variablenwerten anzeigen? Oder am besten
explizit einen neuen String erzeugen, in dem die komplette Befehlszeile
steht?

Danke!
Magnus
 

Lesen sie die antworten

#1 Hauke Laging
28/12/2009 - 16:56 | Warnen spam
Magnus Warker schrieb am Montag 28 Dezember 2009 16:35:

c='rsync ${CFG_OPT} ${CFG_SRC}/ ${CFG_DST} > ${CFG_LOG}'

Die Ausführung des Befehls funktioniert bestens mit eval:

eval "$c"

echo "command: ${c}"

Dabei erhalte ich jedoch folgende Ausgabe:

command: rsync ${CFG_OPT} ${CFG_SRC}/ ${CFG_DST} >
${CFG_LOG}

Es wird also das String-Literal ausgegeben, ohne die verwendeten
Variablen zu evaluieren.



Natürlich, $c enthàlt ja auch diese Literale. Das ist keine
Kommandozeile, die geparst wird, sondern einfach nur Text.

Wie man daraus eine Kommandozeile macht, hast Du ja schon selber
herausgefunden. Nun musst Du sie nur noch anzeigen statt ausführen
lassen:

eval echo "$c"

Und nàchstes Mal in de.comp.os.unix.shell, sonst gibt's Ärger mit
Heiko.


Hauke
http://www.hauke-laging.de/ideen/

Ähnliche fragen