tsibi hat geschrieben:Hallo zusammen,
wenn ich das folgende Script ausführe, ist die Variable nach dem Schleifendurchlauf leer. Warum? Ich kann mir das nicht erklären.
Code: Alles auswählen
#!/usr/bin/sh
message="--> "
echo "Das
Huhn
gackert" |
while read line
do
message="$message$line "
echo $message
done
echo ""
echo $message
Pipe bedeutet Subshell und damit einen extra Prozess. Du kannst natürlich die Variable in dem neuen Prozess ändern, aber es ist nun mal nicht möglich, das Environment des aufrufenden Prozesses zu ändern.
Es gibt wohl einige Shells, die das "richtig" machen, so dass das rauskommt, was erwartet wird. zsh und ksh scheinen das so zu machen. Bei bash mußt du die Pipe eliminieren, z.B. so:
Code: Alles auswählen
~$ foo="blah"
~$ while read line ; do foo="$foo $line"; echo $foo; done <<EOF
> echo eins zwei drei
> EOF
blah echo eins zwei drei
~$ echo $foo
blah echo eins zwei drei