From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20476 invoked from network); 4 Jun 1999 12:23:57 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 4 Jun 1999 12:23:57 -0000 Received: (qmail 20897 invoked by alias); 4 Jun 1999 12:23:46 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 6464 Received: (qmail 20890 invoked from network); 4 Jun 1999 12:23:44 -0000 Message-Id: <9906041156.AA13727@ibmth.df.unipi.it> To: "ZSH workers mailing list" Subject: Re: pws-20: problems with "$@" In-Reply-To: ""Andrej Borsenkow""'s message of "Fri, 04 Jun 1999 15:52:01 DFT." <003201beae80$a8146b70$21c9ca95@mow.siemens.ru> Date: Fri, 04 Jun 1999 13:56:02 +0200 From: Peter Stephenson "Andrej Borsenkow" wrote: > This worked for me under all ZSH versions: > > bor@itsrm2:/opt%> which cd > cd () { > builtin cd "$@" > /dev/null > } > > But now I get: > > bor@itsrm2:~/src%> cd > bor@itsrm2:~/src%> /bin/pwd > /home/bor/src > bor@itsrm2:~/src%> builtin cd > bor@itsrm2:~%> /bin/pwd > /home/bor I don't know if this is the problem, which I can't reproduce, but I realise my last patch for removing quotes around names of parameters should only apply in braces, otherwise the final " in expressions like the one above gets skipped too early. Looking at this, I discovered that nested substitutions don't actually need braces. For example, % print $(echo \~) ~ % print $~$(echo \~) /home/user2/pws --- a nested substitution with globsubst turned on. I guess this is unintentional, and it's confusing, so the patch stops this. Or does somebody know better? --- Src/subst.c.noqt Wed Jun 2 09:54:59 1999 +++ Src/subst.c Fri Jun 4 13:53:27 1999 @@ -976,7 +976,7 @@ zerr("bad substitution", NULL, 0); return NULL; } - } else if (INULL(*s)) + } else if (inbrace && INULL(*s)) s++; else break; @@ -984,7 +984,7 @@ globsubst = globsubst && !qt; idbeg = s; - if ((subexp = (s[-1] && isstring(*s) && + if ((subexp = (inbrace && s[-1] && isstring(*s) && (s[1] == Inbrace || s[1] == Inpar)))) { int sav; int quoted = *s == Qstring; @@ -1168,8 +1168,9 @@ } idend = s; - while (INULL(*s)) - s++; + if (inbrace) + while (INULL(*s)) + s++; if ((colf = *s == ':')) s++; -- Peter Stephenson Tel: +39 050 844536 WWW: http://www.ifh.de/~pws/ Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy