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

RE: Export problem

> > - in ${x:=word} word is *never* splitted irrespectively of
> where it appears
> > and if it is quoted
> Where is that stated?

Nowhere. You misunderstand the basic concept of field splitting in sh. I
suspect, it is a result of incorrect implementation of splitting in zsh.

Field Splitting is the step in processing of command line. It happens
*after* parameter substitution. It means, that ``word'' in ${x:=word} is
never splitted - the *result* of this substitution as a whole may possibly
be splitted.

> > - x=word is not splitted (should I add "never"?)
> Where is that stated?
> Your quote of SUS (which is lifted from POSIX) said
> that each variable assignment undergoes expansion
> in step 4, including parameter expansion and command
> substitution.  In addition, the bit about Field Splitting
> says that "the shell shall scan the results of expansions
> and substitutions that did not occur in double-quotes
> for field splitting and multiple fields can result."
> It then goes on to talk about IFS and how splitting
> is to occur.  I also don't see any exceptions or
> proscriptions against splitting when variable assignment
> is involved.

It does not say "the shell scans the result of *every* expansion ...".
Please, understand - splitting in sh does not happen as part of
variable/command substitution. It happens after these substitutions have
been done. The above simply means that in ``IFS=:; ls a:b${foo}'' the a:b
will *not* be splitted even though IFS is set to ``:''. But ${foo} possibly
will. That is also correctly implemeted by zsh and bash.

> > - in export x=word the whole `x=word' is field splitted unless quoted.
> That seems fairly straight-forward, but I don't understand the
> intended effect.  The output of field splitting is "fields."
> The input is whatever results from the expansion or substitution
> of "words."  Does POSIX define these things?

Yes. Please, look in grammar for definition of WORD, look here
for precise definition how expansions are performed and look in my previous
mail for definition how fields are used (first field becomes command name,
subsequent fields become arguments).

> If `date +%z%f` expanded to "-0400; rm -rf .", what should
> export THIS=`date +%z%f` do?
> a) export THIS with the value "-0400; rm -rf ."
> b) export THIS with the value "-0400; rm -rf ." as an array of 4 words?
>    POSIX doesn't seem to acknowledge the concept of arrays in the Shell
>    Command Language.
> c) export THIS with the value "-0400;" and try to export parameters
>    named "rm", "-rf", and "."?

One answer for all - it should execute command ``export'' with parameters:


What the command ``export'' does with these parameters - it is up to this

> d) retokenize the line and treat it as a sequential list of two commands?

Oh, no! Please :-)


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