Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.os.unix.shell > #14679

Re: bash - while

From Thomas Dorner <dcous260417.dorner@spamgourmet.com>
Newsgroups de.comp.os.unix.shell
Subject Re: bash - while
Date 2026-04-17 18:28 +0200
Message-ID <6eo6jhmu03.fsf@th-dorner.de> (permalink)
References <1j0abm-amjl.ln1@ardbeg.whisky.at.home> <slrn10u4lvt.3h1ug.hjp-usenet4@trintignant.hjp.at>

Show all headers | View raw


"Peter J. Holzer" <hjp-usenet4@hjp.at> writes:

> On 2026-04-17 17:35, Michael Schütz <der.schultze@web.de> wrote:
>> 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
>
> Weil da eine Pipe im Spiel ist und Pipes verbinden verschiedene
> Prozesse. Von den beiden Teilen der Pipe ‹echo ...› und ‹while read ...›
> kann also maximal einer im Hauptprozess des Scripts abgehandelt werden
> und der zweite muss notwendigerweise in einem Kindprozess laufen.
> Variablenzuordnungen im Kindprozess haben aber keine Auswirkungen auf
> den Parent und verschwinden, sobald der Kindprozess terminiert.
>
> Bei der Bash und der Dash wird der erste Teil der Pipe im Parent
> abgehandelt, alle anderen in Kindprozessen. Ich glaube, das ist auch
> POSIX-Standard, bin aber gerade zu faul zum Nachschlagen.
>
>> und wie kann ich das umgehen?
>
> Du könntest die zsh verwenden. Bei der wird der letzte Teil der Pipe im
> Parent abgehandelt, was meistens praktischer ist.
>
> Sonst musst Du das Script so umstrukturieren, dass die Schleife nicht an
> der zweiten Stelle einer Pipe steht.

Oder in der BaSH einfach
shopt -s lastpipe

Viele Grüße, Thomas
-- 
Adresse gilt nur kurzzeitig!

Back to de.comp.os.unix.shell | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

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