From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4226 invoked from network); 23 Oct 1999 17:43:37 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 23 Oct 1999 17:43:37 -0000 Received: (qmail 25583 invoked by alias); 23 Oct 1999 17:43:21 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 8380 Received: (qmail 25576 invoked from network); 23 Oct 1999 17:43:19 -0000 From: "Bart Schaefer" Message-Id: <991023174311.ZM22277@candle.brasslantern.com> Date: Sat, 23 Oct 1999 17:43:11 +0000 In-Reply-To: <991023083509.ZM21037@candle.brasslantern.com> Comments: In reply to "Bart Schaefer" ""typeset -x" vs. "export" in 3.1.6" (Oct 23, 8:35am) References: <991023083509.ZM21037@candle.brasslantern.com> X-Mailer: Z-Mail (5.0.0 30July97) To: zsh-workers@sunsite.auc.dk Subject: Re: "typeset -x" vs. "export" in 3.1.6 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii On Oct 23, 8:35am, Bart Schaefer wrote: } Subject: "typeset -x" vs. "export" in 3.1.6 } } Consider the following two functions: } } putenv() { typeset -x $1=$2 } } setenv() { export $1=$2 } } } Is it really intentional that they don't have the same behavior? I'm coming to the conclusion that this just can't be right. There doesn't seem to have ever been doc written for "typeset -g". The ChangeLog says "doesn't locallize" and my own commitlog says "marks non-local, which is not the same as global". Before, "typeset -x" meant "marks global and puts in the environment, iff not marked local" which seems to have mutated into "puts in the environment, iff marked global". This has the effect of rendering -x a no-op anywhere except at the top level, which I'm pretty sure is incompatible with ksh. (In bash, "typeset -x" in a function puts the symbol into the environment but then removes it from the environment again when the function exits; "export" puts it in the environment and does not remove it again, but it gets removed when the surrounding context exits if it was local to that outer context. Can someone who has a real ksh available please confirm what the precise ksh behavior is? Does it differ in 88/93?) (Note that in 3.1.6, neither "typeset -x" nor "export" puts a local into the environment under any circumstances. The difference is only in what circumstances cause a parameter to be considered a local.) Achiving compatibility with past versions of zsh (modulo the fix that in 3.0.x "typeset -x FOO=bar" does not assign bar to FOO when FOO is already a local, although it both assigns and exports if FOO was not previously declared at all) appears to be as simple as having -x imply -g, and that would be my preferred solution to all this. However, I'm not averse to having zsh do the right thing in an emulation mode. I'm just pretty sure it's currently doing the wrong thing in both cases. -- Bart Schaefer Brass Lantern Enterprises http://www.well.com/user/barts http://www.brasslantern.com