Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #15306 > unrolled thread

Re: Setting nullglob causes variables containing backslashes to be expanded to an empty string

Started byStephane Chazelas <stephane.chazelas@gmail.com>
First post2019-08-07 07:27 +0100
Last post2019-08-07 07:27 +0100
Articles 1 — 1 participant

Back to article view | Back to gnu.bash.bug

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: Setting nullglob causes variables containing backslashes to be expanded to an empty string Stephane Chazelas <stephane.chazelas@gmail.com> - 2019-08-07 07:27 +0100

#15306 — Re: Setting nullglob causes variables containing backslashes to be expanded to an empty string

FromStephane Chazelas <stephane.chazelas@gmail.com>
Date2019-08-07 07:27 +0100
SubjectRe: Setting nullglob causes variables containing backslashes to be expanded to an empty string
Message-ID<mailman.979.1565159417.1985.bug-bash@gnu.org>
[re-post via gmane as the usenet interface seems not to work
again. My posts can be seen at
https://groups.google.com/forum/#!topic/gnu.bash.bug/0JgBRq_778o
but were apparently not forwarded to the mailing list]

2019-08-06 16:00:21 -0400, Greg Wooledge:
> On Tue, Aug 06, 2019 at 06:18:27PM +0000, Mohamed Akram wrote:
> > Bash version: GNU bash, version 5.0.7(1)-release (x86_64-apple-darwin18.5.0)
> >
> > Example:
> >
> > shopt -s nullglob
> > a='\x30'
> > echo $a
> >
> > Expected output:
> >
> > \x30
> >
> > Actual output:
> >
>
> Also happens in bash 5.0 on Debian GNU/Linux.  It does not happen in
> bash 4.4 or earlier (I tried back to 3.2) on the same machine.
[...]

That is being discussed on the austin-group mailing list (and has
been discussed here before as well IIRC).

The idea is that in 5.0, \ became a globbing quoting operator.

So with nullglob, the \x30 expands to x30 when there's a file
called x30 in the current directory and nothing if not.

That is by design and was supported until relatively recently by
some Austin Group people (the guys behind POSIX). That's not
done by any other major shell.

See http://austingroupbugs.net/view.php?id=1234 and the very
long discussions that follow on the mailing list:

See for instance
https://www.mail-archive.com/austin-group-l@opengroup.org/msg04237.html

As seen there, with the current head of the  devel branch, that
behaviour can be disabled by turning off the posixglob option.

$ a='\x30' ./bash +O posixglob -O nullglob -c 'printf "%s\n" $a'
\x30
$ a='\x30' ./bash -O nullglob -c 'printf "%s\n" $a'

$ touch x30
$ a='\x30' ./bash -O nullglob -c 'printf "%s\n" $a'
x30


In any case, yes, do remember to quote your variable expansions
and not use echo for arbitrary data.

-- 
Stephane

[toc] | [standalone]


Back to top | Article view | gnu.bash.bug


csiph-web