zsh-workers
 help / color / mirror / code / Atom feed
From: "Bart Schaefer" <schaefer@candle.brasslantern.com>
To: <zsh-workers@sunsite.dk>
Subject: Re: PATCH: 3.1.9-dev-8: Re: Word splitting in zsh
Date: Mon, 12 Feb 2001 19:38:48 +0000	[thread overview]
Message-ID: <1010212193848.ZM23715@candle.brasslantern.com> (raw)
In-Reply-To: <000901c094c6$d2bcd500$21c9ca95@mow.siemens.ru>
In-Reply-To: <002701c094fd$d7680890$21c9ca95@mow.siemens.ru>

On Feb 12, 10:38am, Andrej Borsenkow wrote:
}
} > This applies only to ${...+...} and ${...-...}, with or without the `:'.
} > As I mentioned, there would be some benefit to also doing this for the
} > ${...=...} forms, because then things like ${(A)foo="$bar[@]"} would work
} > independently of the setting of shwordplit.
} >
} 
} Is the following a bug in shell and should zsh emulate it?
} 
} bor@itsrm2% sh
} $ set "a b c" 1 2
} $ args ${foo="$@"}
} 3
} a b c
} 1
} 2

Bash seems to emulate it.

} In case of ${name-word} or ${name+word} sh does exactly *one* expansion (as
} opposed to zsh that does two)

That's not precisely what's happening in zsh.  It does only one expansion,
but it does word splitting based on the outer (lack of) quotes rather than
the inner ones.  Which I suppose could be called "two expansions" ...

The equivalent of the patch that I made for ${x+y} and ${x-y}, applied to
${x=y}, would have the effect of emulating the above behavior.

On Feb 12,  5:12pm, Andrej Borsenkow wrote:
} Subject: RE: PATCH: 3.1.9-dev-8: Re: Word splitting in zsh
}
} And is this a bug or feature in zsh (with Bart's patch):

Note that my patch makes absolutely no difference to this; read the very
first double-excerpted paragraph above.

} bor@itsrm2% baz=("aa bb" cc)
} bor@itsrm2% print -l "${(A)foo=$baz[@]}"
} aa bb
} cc
} bor@itsrm2% print -l "${(A)foo=$baz[@]}"
} aa bb cc
} 
} both cases should evaluate to the value of $foo, if I read specs
} properly, and be identical, i.e. as in the second case.

This is a slightly different bug; what's interesting is how bash handles
it ... note the difference between ${x+y} and ${x=y}:

[schaefer@zagzig schaefer]$ set "a1 a2 a3" b c                                 
[schaefer@zagzig schaefer]$ for i in "${1+$@}"; do echo "$i"; done
a1 a2 a3
b
c
[schaefer@zagzig schaefer]$ for i in "${foo=$@}"; do echo "$i"; done
a1 a2 a3 b c
[schaefer@zagzig schaefer]$ for i in "${foo+$@}"; do echo "$i"; done
a1 a2 a3
b
c

To "fix" this in zsh is trivial, if we want it fixed; just copy some
code from above the "Check for ${..?..} or ${..=..} or one of those."
block:

Index: Src/subst.c
===================================================================
--- Src/subst.c	2001/02/10 20:33:32	1.73
+++ Src/subst.c	2001/02/12 19:22:18
@@ -1454,6 +1454,14 @@
 		}
 		*idend = sav;
 		copied = 1;
+		if (isarr) {
+		  if (nojoin)
+		    isarr = -1;
+		  if (qt && !getlen && isarr > 0) {
+		    val = sepjoin(aval, sep, 1);
+		    isarr = 0;
+		  }
+		}
 	    }
 	    break;
 	case '?':

-- 
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-12 19:39 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 [this message]
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
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=1010212193848.ZM23715@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).