Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [doc] "sh_word_split nothing to do with word splitting"?

2018-03-12 00:41:03 +0100, Martijn Dekker:
> Op 11-03-18 om 21:53 schreef Stephane Chazelas:
> > What about changing it to something like:
> [...]
> > +Causes tt($IFS) field splitting to be performed on unquoted parameter
> > +expansions in addition to command substitutions. Note that contrary to
> > +POSIX shells, field splitting is still not performed on unquoted
> > +arithmetic expansions
> In terms of sh emulation, that's actually a bug. It may be terrible (who
> would ever want to split an arithmetic expansion?), but emulation is
> emulation and SH_WORD_SPLIT should cause splitting as in POSIX sh.

I'd rather zsh keep it that way as a statement of resistance
against silliness, at least until someone complains that his
POSIX script fails when run on zsh because its arithmetic
expansions are not split as expected.

Not doing so would keep fixing scripts where authors omitted to
quote arithmetic expansions in contexts where $IFS contained
dashes (or digits) on the ground that no shell author in their
right mind would ever want to subject arithmetic expansion to
split+glob (note that no shell does split+glob upon tilde
expansion nor process substitution nor $'...' expansions (though
bash used to do globbing upon tilde expansion) where that
wouldn't make sense *either*).

pdksh was not doing word/field splitting there and posh and
OpenBSD sh still don't.

> >                        and contrary to the Bourne shell, not on words
> > +that are not the result of expansions.
> Now that even Solaris finally got rid of it, I think the ancient Bourne
> shell is definitively obsolete and not worth mentioning in current
> documentation. POSIX is the norm now.

Agreed. I suspect the original text was making that point about
"shwordsplit having nothing to do with word splitting" in
reference to the Bourne shell.

> >                                         Like in other Bourne-like shells,
> I'd say "Like in other POSIX shells,".

Except that zsh (like many other Bourne-like shells) is not
strictly speaking fully compliant (though on several aspects is more
compliant in sh emulation than some certified ones like the
/usr/xpg4/bin/sh of Solaris)

> [...]
> > Not sure it's worth mentioning:
> > 
> > $var() function-definition
> > 
> > as a context where shwordsplit happens.
> It might be better if the possibility to define functions by names
> resulting from expansions were disabled completely if SH_WORD_SPLIT is
> active, so the program fails properly instead of producing weird/broken
> behaviour.
> Alternatively, SH_WORD_SPLIT could be ignored in that context.

AFAIK, that's a feature which is actually used in some of the
functions shipped with zsh to declare several functions at once
with the same body.

It's not a POSIX conformance issue as the behaviour is
unspecified there for:

$var() { ...; }

As $var is not a valid function name.

In any case, I wouldn't expect anyone to use SH_WORD_SPLIT for
anything but to interpret POSIX/ksh scripts (via "emulate sh/ksh")
which wouldn't have such constructs, so I don't expect it would
cause any problem.

On the other hand, one might still want to do:

$=myfunctions() { something; zle .$WIDGET; }

for instance, that is using the explicit word-split operator to
define several functions at once.


Messages sorted by: Reverse Date, Date, Thread, Author