bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Trailing newlines disappear


From: Greg Wooledge
Subject: Re: Trailing newlines disappear
Date: Thu, 8 Jun 2017 16:30:49 -0400
User-agent: Mutt/1.4.2.3i

ARGH!  You dropped the list address!  This was on bug-bash, right??

On Fri, Jun 09, 2017 at 03:14:10AM +0700, PePa wrote:
> On 09/06/2560 02:14, Greg Wooledge wrote:
> > Well, it leaves IFS changed, because you didn't revert or unset it,
> > or run the entire thing in a function with local IFS.  Also, I'd use
> > "${MAPFILE[*]}" to reinforce that you are joining an array into a string,
> > rather than expanding the array as a list.
> 
> Thanks for pointing all this out. I settled on:
> mapfile <"$file"; IFS= foo=${MAPFILE[*]} true
> 
> Again, much faster than a subshell. Are there order guarantees in the
> case of "a=x b=y command"??
> 
> Peter

You have a massive error here.  Your variables exist only for the
duration of that "true" command.

imadev:~$ unset x y
imadev:~$ x=1 y=3 true
imadev:~$ declare -p x y
bash: declare: x: not found
bash: declare: y: not found

In the case of "x=1 y=2", yes, there is a guarantee of processing order.
You may safely write things like:

tmp=${x##*[} tmp=${tmp%%]*} tmp=${tmp//x/y}

And they will be done from left to right.  But in your example, the
question is moot, because your variables don't survive at all.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]