Zsh Mailing List Archive
Messages sorted by:
Square brackets in command position
On Sat, Jun 5, 2021 at 10:05 AM Stephane Chazelas <stephane@xxxxxxxxxxxx> wrote:
> 2021-06-04 17:20:29 -0700, Bart Schaefer:
> > > array[1 + 1]=4
> > >
> > > That is pretty annoying.
> > That's just shell whitespace rules, though.
> Note that all other shells that support a=value (ksh, pdksh,
> bash) do it.
Chip will probably correct me, but from some experiments with bash it
appears that (with the exception of '[' all alone, to invoke "test")
an (unquoted) '[' in a word in command position always begins an
expression that must be bounded by a closing (unquoted) ']' (even if
that means continuing to the PS2 prompt). Thus for example
$ a[ 1 + 1 ]b
globs to a file named "a b" in the current directory and does a path
search to run that as a command. Note that
$ [a ]b
globs to "ab" or " b" (leading space there if that's hard to see),
it's not what's to the left of '[' that triggers this.
Thus it's not just assignments that have command-position magic,
character classes can have embedded (unquoted) spaces there as well.
This breaks if you are looking for a file named e.g. "a+=" because
']=' turns the whole thing into an array element assignment.
> There is variation in behaviour between shells if the first word
> starts with name[ and either a matching ] or matching ] followed
> by = is not found, and how that matching is done or what kind of
> quoting are supported inside the [...].
That doesn't give us any good ideas on where to start. Of course
zsh's parsing hash keys using the same quoting rules as arithmetic was
a quick way to slurp hash[string] through the existing array[math]
parser at the time, and in retrospect probably should have been given
its own rules.
> In zsh, that would be even less problematic as (at least when
> not in sh emulation), zsh complains about unmatched [s or ]s
As mentioned before, that's the BAD_PATTERN setopt, which can be
turned off independent of emulation, so it might be a stretch to say
we wouldn't be breaking anything.
Messages sorted by: