[Top][All Lists]

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

Re: Backslash missing in brace expansion

From: Ilkka Virta
Subject: Re: Backslash missing in brace expansion
Date: Fri, 6 Dec 2019 22:29:14 +0200
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:60.0) Gecko/20100101 Thunderbird/60.9.1

On 6.12. 21:36, Eric Blake wrote:
On 12/5/19 10:53 PM, Martin Schulte wrote:

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

It may be version dependent:

$ echo ${BASH_VERSINFO[@]}
5 0 7 1 release x86_64-redhat-linux-gnu

$ echo b{Z..a}d
bash: bad substitution: no closing "`" in `d

I get that with 4.4 and 'echo b{Z..a}d' too, the trailing letter seems to trigger it.

Which also doesn't seem to make sense, but one might argue that {Z..a} doesn't make much sense in the first place. Seriously, is there an actual use case for such a range?

It doesn't seem to even generalize from that if you go beyond letters, so you can't do stuff like generating all the printable ASCII characters with it in Bash.

Ilkka Virta / address@hidden

reply via email to

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