Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > de.comp.os.unix.shell > #14685
| From | Helmut Waitzmann <nn.throttle@erine.email> |
|---|---|
| Newsgroups | de.comp.os.unix.shell |
| Subject | Re: bash - while |
| Date | 2026-04-18 12:07 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <83h5p84m58.fsf@helmutwaitzmann.news.arcor.de> (permalink) |
| References | <1j0abm-amjl.ln1@ardbeg.whisky.at.home> |
Michael Schütz <der.schultze@web.de>:
> Hallo Gruppe,
>
> ich versuche mir etwas zu scripten, scheitere aber an einem
> Phänomen, das ich mir nicht erklären kann.
>
>
> Das funktioniert:
>
> trallala=""
> while read L;do
> if [[ ! "${L}" = "" ]];then
> trallala=$(sed "s/$/$L, /" <<< ${trallala})
> echo ${trallala}
> else break
> fi
> done
> echo "Ende: ${trallala}"
>
> Die Variable "trallala" wird bei jedem Schleifendurchgang um die
> Eingabe erweitert und nach dem 'done' kann die Variable weiter
> genutzt werden.
>
>
> Das funktioniert nicht:
>
> trallala=""
> echo -e "etc\nsdf\nkji"|while read L;do
> if [[ ! "${L}" = "" ]];then
> trallala=$(sed "s/$/$L, /" <<< ${trallala})
> echo ${trallala}
> else break
> fi
> done
> echo "Ende: ${trallala}"
>
> Innerhalb der Schleife ist das Verhalten, wie oben, aber nach
> dem 'done' ist die Variable leer.
>
>
> Warum ist das so
>
Wie andere schon geschrieben haben: Wenn der rechte Teil der
Pipeline ein eigener Prozess (und damit ein eigenes
Subshell‐Environment) ist, sind seine Variablen nach seinem Ende
nicht mehr da.
> und wie kann ich das umgehen?
>
Neben dem, was andere schon geschrieben haben, kann man auch
sicherstellen, dass sich der rechte Teil der Pipeline bis über
die Verwendung der Variablen nach Ende der „while“‐Schleife
erstreckt, indem man Schweifklammern verwendet:
printf '%b\n' 'etc\nsdf\nkji' |
{
while read z && ${z:+:} false
do
v="${v}${z}, "
printf '%s\n' "$v"
done
printf '%s\n' "Ende: $v"
}
Back to de.comp.os.unix.shell | Previous | Next — Previous in thread | Next in thread | Find similar
bash - while Michael Schütz <der.schultze@web.de> - 2026-04-17 17:35 +0200
Re: bash - while "Peter J. Holzer" <hjp-usenet4@hjp.at> - 2026-04-17 17:55 +0200
Re: bash - while Michael Schütz <der.schultze@web.de> - 2026-04-17 18:43 +0200
Re: bash - while Thomas Dorner <dcous260417.dorner@spamgourmet.com> - 2026-04-17 18:28 +0200
Re: bash - while Michael Schütz <der.schultze@web.de> - 2026-04-18 00:26 +0200
Re: bash - while Christian Weisgerber <naddy@mips.inka.de> - 2026-04-18 00:45 +0000
Re: bash - while Ulli Horlacher <framstag@rus.uni-stuttgart.de> - 2026-04-18 07:14 +0000
Re: bash - while Helmut Waitzmann <nn.throttle@erine.email> - 2026-04-18 14:03 +0200
Re: bash - while Michael Schütz <der.schultze@web.de> - 2026-04-18 10:08 +0200
Re: bash - while Christian Weisgerber <naddy@mips.inka.de> - 2026-04-17 20:22 +0000
Re: bash - while Helmut Waitzmann <nn.throttle@erine.email> - 2026-04-18 14:00 +0200
Re: bash - while Helmut Waitzmann <nn.throttle@erine.email> - 2026-04-18 12:07 +0200
Re: bash - while Michael Schütz <der.schultze@web.de> - 2026-04-18 21:11 +0200
csiph-web