From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3466 invoked from network); 17 Mar 1999 15:28:32 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 17 Mar 1999 15:28:32 -0000 Received: (qmail 6920 invoked by alias); 17 Mar 1999 15:08:10 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 5847 Received: (qmail 6912 invoked from network); 17 Mar 1999 15:08:06 -0000 Message-Id: <9903171452.AA37265@ibmth.df.unipi.it> To: "Peter Stephenson" , zsh-workers@sunsite.auc.dk Subject: Re: PATCH: param stuff and was: PATCH: 3.1.5-pws-12: _brace_parameter In-Reply-To: ""Andrej Borsenkow""'s message of "Wed, 17 Mar 1999 17:35:30 NFT." <001201be7083$68588150$21c9ca95@mowp.siemens.ru> Date: Wed, 17 Mar 1999 15:52:01 +0100 From: Peter Stephenson "Andrej Borsenkow" wrote: > > > > It's actually completely predictable, once you know the rule. > > I wrote that rather primly before I discovered the difference between "${foo[1]}" and "${${(@)foo}[1]}" where foo is an array, which made me rather less keen on this as a transformational generative grammar :-) > itsrm2% foo=(axb cxd) > itsrm2% print -l ${(s/x/)foo} > a > b c > d > > itsrm2% foo=("a b" "c d") > itsrm2% print -l ${=foo} > a > b > c > d The rule is that, before splitting, all the words are joined together; by default this happens with a space. (At least some of this is in the manual, not necessarily where you want for the present purpose.) So in both cases the string is first joined with a space (what Chomsky would call a trace :-) sorry, I'm enjoying myself) and the `deep structure' is "axb cxd", "a b c d" respectively; in the second it's then split on a space, too. Compare % foo=(axb cxd) % print -l ${(j/x/s/x/)foo a b c d where the bit you don't see is now "axbxcxd". > The second question is, what is applied first - flags or modifications? > Again, after soms tests :-) > > itsrm2% foo=(ax1 bx1) > itsrm2% print -l ${(s/x/)foo%%1*} > a > b Yes, that's perhaps a bit unexpected and should be documented; ${${(s/x/)foo}%%1*} does what you might have expected. Now I tried: % print -l "'"${(j/x/s/x/)^foo%%1*}"'" 'a' '' 'b' '' where the removal of the 1 seems to happen only after the splitting, so I'm still a bit confused. I'll look at the manual when I get a moment, but I'm trying to remember how to minimize some functions of matrices. > P.S. Please, don't take me too hard. But just try to pretend itself a ZSH > newbie for a while ... This is useful, because people keep complaining that they don't like the documentation, and then fail to say what's wrong with it. This way we finally find out. -- Peter Stephenson Tel: +39 050 844536 WWW: http://www.ifh.de/~pws/ Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy