Backslash missing in brace expansion

2019-12-05 Thread Martin Schulte
Hello,

please have a look:

$ uname -a
Linux martnix4 4.9.0-11-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11)
x86_64 GNU/Linux $ echo ${BASH_VERSINFO[@]}
4 4 12 1 release x86_64-pc-linux-gnu
$ set -x
$ echo {Z..a}
+ echo Z '[' '' ']' '^' _ '`' a
Z [  ] ^ _ ` a

It looks as if the backslash (between [ and ] in ASCII code) is missing in
brace expansion. The same behaviour seems to be found in bash 5.0.

Best regards,

Martin



Re: Backslash missing in brace expansion

2019-12-05 Thread Chet Ramey
On 12/5/19 11:11 AM, Martin Schulte wrote:
> Hello,
> 
> please have a look:
> 
> $ uname -a
> Linux martnix4 4.9.0-11-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11)
> x86_64 GNU/Linux $ echo ${BASH_VERSINFO[@]}
> 4 4 12 1 release x86_64-pc-linux-gnu
> $ set -x
> $ echo {Z..a}
> + echo Z '[' '' ']' '^' _ '`' a
> Z [  ] ^ _ ` a
> 
> It looks as if the backslash (between [ and ] in ASCII code) is missing in
> brace expansion. The same behaviour seems to be found in bash 5.0.

It's an unquoted backslash, which is removed by quote removal when the
words are expanded. Look at the extra space between `[' and `]'; that's
the null argument resulting from the unquoted backslash.


-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRUc...@case.eduhttp://tiswww.cwru.edu/~chet/



Re: Backslash missing in brace expansion

2019-12-05 Thread Martin Schulte
Hi Chet, hi all!

On Thu, 5 Dec 2019 12:01:31 -0800
Chet Ramey  wrote:

> On 12/5/19 11:11 AM, Martin Schulte wrote:
> > Hello,
> > 
> > please have a look:
> > 
> > $ uname -a
> > Linux martnix4 4.9.0-11-amd64 #1 SMP Debian 4.9.189-3+deb9u2
> > (2019-11-11) x86_64 GNU/Linux $ echo ${BASH_VERSINFO[@]}
> > 4 4 12 1 release x86_64-pc-linux-gnu
> > $ set -x
> > $ echo {Z..a}
> > + echo Z '[' '' ']' '^' _ '`' a
> > Z [  ] ^ _ ` a
> > 
> > It looks as if the backslash (between [ and ] in ASCII code) is
> > missing in brace expansion. The same behaviour seems to be found in
> > bash 5.0.
> 
> It's an unquoted backslash, which is removed by quote removal when the
> words are expanded. Look at the extra space between `[' and `]'; that's
> the null argument resulting from the unquoted backslash.

Yes - sure. But then I'm wondering why the unquoted backtick doesn't
start command substitution:

$ echo {Z..a}
Z [  ] ^ _ ` a
$ echo Z [ \ ] ^ _ ` a
> 

Best regards,

Martin