Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

bash: parameter expansion wird nicht ausgegeben?

0 views
Skip to first unread message

Magnus Warker

unread,
Dec 28, 2009, 10:35:47 AM12/28/09
to
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


Hauke Laging

unread,
Dec 28, 2009, 10:56:42 AM12/28/09
to
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/

Realname [m]

unread,
Dec 28, 2009, 10:57:05 AM12/28/09
to
Magnus Warker <mag...@mailinator.com> schrieb:


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

> Wie kann man denn den String mit Variablenwerten anzeigen? Oder am besten


> explizit einen neuen String erzeugen, in dem die komplette Befehlszeile
> steht?

eval d=\"$c\"
echo "$d"

Realname [m]

unread,
Dec 28, 2009, 11:01:32 AM12/28/09
to
Hauke Laging <4q2...@hauke-laging.de> schrieb:

> Magnus Warker schrieb am Montag 28 Dezember 2009 16:35:
>
>> c='rsync ${CFG_OPT} ${CFG_SRC}/ ${CFG_DST} > ${CFG_LOG}'

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

Falsch; spätestens beim '>' kracht es.

Hauke Laging

unread,
Dec 28, 2009, 11:57:26 AM12/28/09
to
Hauke Laging schrieb am Montag 28 Dezember 2009 16:56:

> eval echo "$c"

Da fehlen noch Anführungszeichen:

eval echo \""$c"\"

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

Magnus Warker

unread,
Jan 4, 2010, 4:45:53 AM1/4/10
to
Danke!
0 new messages