Eric Blake <[email protected]> wrote:
> > --- code
> > prefix() { sed -e "s/^/$1:/"; }
> > DASH_CODE() { :; }
> >
> > prefix A <<XXX && echo "$(prefix B <<XXX
> > echo line 1
> > XXX
> > echo line 2)" && prefix DASH_CODE <<DASH_CODE
> > echo line 3
> > XXX
> > echo line 4)"
> > echo line 5
> > DASH_CODE
> >
> > --- bash 4.3.42 output:
> > A:echo line 3
> > B:echo line 1
> > line 2
> > DASH_CODE:echo line 4)"
> > DASH_CODE:echo line 5
>
> So, it looks like bash is interpreting this as "first newline that is
> not in the middle of another shell word), and parses the entire $(...)
I would like to get an explanation on what I should understand by:
"first newline that is not in the middle of another shell word)
BTW: If I replace $(..) by `..` and feed the code to the original SVr4 Bourne
Shell, I get the same output as you got from bash. I would guess that the bash
output you added above is correct.
Note that the command substitution is part of a " quoted string and even
without that, it would need to be parsed first.
The POSIX version from ksh88 (seen on Solaris) behaves the same with $(..) and
the `..` variant and the same as bash.
The fact that ksh93 behaves different with $(..) and the `..` variant makes it
obvious that ksh93 has a bug.
Jörg
--
EMail:[email protected] (home) Jörg Schilling D-13353 Berlin
[email protected] (work) Blog:
http://schily.blogspot.com/
URL: http://cdrecord.org/private/
http://sourceforge.net/projects/schilytools/files/'
--
To unsubscribe from this list: send the line "unsubscribe dash" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html