bash stdin redirect

[Loetzinn]

echo `eval echo \\$n$i`

1) Du gibst "echo `eval echo \\$n$i`" ein.
2) Die Shell interpretiert alle back-slashes; der eigentliche Ausdruck ist
dann: "echo `eval echo \$n$i`"
3) eval sieht als parameter die strings "echo" "\$n$i"
4) evaluiert diese zu "echo" "$n1"
5) und fuehrt den befehl dann aus. Das Ergebnis ist "8 10 9"
6) Das allererste echo schreibt den String dann auf den Bildschirm.

2) Die Shell interpretiert eine Menge. Der urspruengliche Befehl wird zu
echo `eval echo '\$'n1` umgewandelt.
3) eval interpretiert die beiden Parameter 'echo' und '\$n1' (und wundert sich
ein wenig warum das unnuetze \$ eingegeben wurde...) zum Befehl
"echo <<inhalt von $n1>>" um.
4) Dieser wird dann ausgefuehrt
etc.

Einfacher haette ich auch
echo `eval echo '$n'$i`
schreiben koennen:

1) Die Shell expandiert den Ausdruck in den Backticks zu
eval 'echo' '$n1'
2) eval expandiert die Parameter zu
echo <<inhalt von $n1>>
3) der Inhalt von $n1 wird dann vom ersten echo auf die Konsole ausgegeben.

oder auch:
echo `eval echo '$n'$i`
echo `eval echo '$'n$i`
echo `eval echo "$"n$i`

aber nicht:
echo `eval echo "$n"$i`

Thomas

Hat alles super funktioniert, danke!

Andrea

* [A.D. 19/12/06 22:44], Thomas Pircher <tehpeh(a)gmx.net> probably wrote: