From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7692 invoked from network); 6 Jun 2001 14:41:48 -0000 Received: from sunsite.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 6 Jun 2001 14:41:48 -0000 Received: (qmail 23381 invoked by alias); 6 Jun 2001 14:41:30 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 14764 Received: (qmail 23370 invoked from network); 6 Jun 2001 14:41:29 -0000 X-Envelope-Sender-Is: Andrej.Borsenkow@mow.siemens.ru (at relayer goliath.siemens.de) From: "Andrej Borsenkow" To: "Zsh hackers list" Subject: RE: Export problem Date: Wed, 6 Jun 2001 18:41:36 +0400 Message-ID: <002901c0ee96$c9e38490$21c9ca95@mow.siemens.ru> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4522.1200 In-Reply-To: <20010606094857.A23921@dman.com> Importance: Normal > > > - 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: THIS=-0400; rm -rf . What the command ``export'' does with these parameters - it is up to this command. > d) retokenize the line and treat it as a sequential list of two commands? > Oh, no! Please :-) -andrej