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


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

Re: bash - while

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>

Show all headers | View raw


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