I think this shows the bug in a simpler way: $ echo A > foo ; echo B > bar $ echo ./{foo,bar} ./foo ./bar $ cat <(echo ./{foo,bar}) ./foo ./bar Why does process substitution add the newline? It doesn't happen when the files are listed separately, not using the {} syntax: $ echo ./foo ./bar ./foo ./bar $ cat <(echo ./foo ./bar) ./foo ./bar Apparently, this bug was fixed in newer Bash. It's not that big of a deal now that I know about it! Mike On Tue, 25 Mar 2014, Mike Miller wrote: > Here's a bug I just discovered in GNU Bash. It's in this version: > > GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) > Copyright (C) 2005 Free Software Foundation, Inc. > > I make two files of one character each: > > $ echo A > foo > $ echo B > bar > > > This works as expected: > > $ echo -e 'C\nD' | paste <(cat foo bar) - > A C > B D > > > This should do the same thing but it fails: > > $ echo -e 'C\nD' | paste <(cat ./{foo,bar}) - > A B C > D > > That's pretty bad! I have to be careful. Strangely, it's all about the use > of "<()" for process substitution because this behaves normally: > > $ cat ./{foo,bar} > A > B > > This newer version of Bash does not have the same problem: > > GNU bash, version 4.0.33(1)-release (x86_64-pc-linux-gnu) > Copyright (C) 2009 Free Software Foundation, Inc. > > > Unfortunately, our rocks cluster built on CentOS is using the old version of > Bash. Another University machine is running this old version and it also has > the bug: > > GNU bash, version 2.05b.0(1)-release (i386-redhat-linux-gnu) > Copyright (C) 2002 Free Software Foundation, Inc. > > > So my own boxes are OK, all using Bash 4 and Ubuntu, but I can't upgrade Bash > on these other machines without requesting help. > > Mike >