zsh-workers
 help / color / mirror / code / Atom feed
From: "Bart Schaefer" <schaefer@candle.brasslantern.com>
To: "Zsh hackers list" <zsh-workers@sunsite.dk>
Subject: Re: More incompatibility :-) RE: PATCH: 3.1.9-dev-8: Re: Word splitting in zsh
Date: Thu, 15 Feb 2001 08:34:46 +0000	[thread overview]
Message-ID: <1010215083446.ZM9777@candle.brasslantern.com> (raw)
In-Reply-To: <000001c09716$fe7662e0$21c9ca95@mow.siemens.ru>

On Feb 15,  9:17am, Andrej Borsenkow wrote:
} Subject: RE: More incompatibility :-) RE: PATCH: 3.1.9-dev-8: Re: Word spl
}
} Ehh ... I did not mean it actually. My concern was that in ${=$(...)}
} the `=' must not affect what happens inside of $(...).

It could be argued either way.  The doc says:

     Perform word splitting using the rules for SH_WORD_SPLIT during the
     evaluation of SPEC, but regardless of whether the parameter
     appears in double quotes;

The $(...) is in fact part of SPEC.  The problem is that, because ${=...}
is not implemented by actually toggling SH_WORD_SPLIT, it's surprising
what happens in cases like ${=x+$(setopt noshwordsplit; ...)}.

} What I believe
} should happen in case of ${x+${y}} - first, value is computed. It
} is either $x or $y - without any wordsplitting. Then `=' is applied
} to the result.

What you've described is exactly what zsh does (withOUT my patch).  This
is what causes ${1+"$@"} to behave strangely:  "$@" is expanded to an
array, but then the elements of the result are subject to splitting, if
splitting is enabled for the context (no matter why).

My patch attempted to make it the responsibility of multsub() to do any
splitting necessary on the right-hand-side of +/-, which works as long
as the entire RHS is a parameter substition.  However, In the case of
${1+some words "$@" more words}, prefork() [called by multsub()] just
doesn't do enough:  It yields "some words $1" ... "$@[-1] more words",
where sh would give "some" "words" "$1" ... "$@[-1]" "more" "words".

I've just about reached the conclusion that the RHS of these kinds of
expansions will have to be re-lexed in order to be wordsplit properly.
Once they've been lexed as a single word during the first pass, there
is no provision for differentiating the quoted and unquoted substrings
after expansion -- except within "nested" expansions, which doesn't
cover all the possible cases.

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   


  reply	other threads:[~2001-02-15  8:35 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <000d01c0926a$ce26c590$21c9ca95@mow.siemens.ru>
2001-02-09 18:18 ` Bart Schaefer
2001-02-10 20:24   ` PATCH: 3.1.9-dev-8: " Bart Schaefer
2001-02-12  7:38     ` Andrej Borsenkow
2001-02-12 14:12       ` Andrej Borsenkow
2001-02-12 19:38         ` Bart Schaefer
2001-02-13  7:51     ` More incompatibility :-) " Andrej Borsenkow
2001-02-13  9:26       ` Bart Schaefer
2001-02-13  9:57         ` Andrej Borsenkow
2001-02-13 19:33           ` Bart Schaefer
2001-02-14 18:00             ` Peter Stephenson
2001-02-15  6:17               ` Andrej Borsenkow
2001-02-15  8:34                 ` Bart Schaefer [this message]
2001-02-15 10:35                   ` More incompatibility (word splitting) Peter Stephenson
2001-02-16  7:43                     ` PATCH: " Bart Schaefer
2001-02-16  8:50                       ` Andrej Borsenkow
2001-02-16 17:03                         ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1010215083446.ZM9777@candle.brasslantern.com \
    --to=schaefer@candle.brasslantern.com \
    --cc=zsh-workers@sunsite.dk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).