From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from euclid.skiles.gatech.edu (list@euclid.skiles.gatech.edu [130.207.146.50]) by melb.werple.net.au (8.7.5/8.7.3/2) with ESMTP id DAA21574 for ; Sat, 13 Jul 1996 03:51:50 +1000 (EST) Received: (from list@localhost) by euclid.skiles.gatech.edu (8.7.3/8.7.3) id NAA16732; Fri, 12 Jul 1996 13:44:05 -0400 (EDT) Resent-Date: Fri, 12 Jul 1996 13:44:05 -0400 (EDT) From: Zoltan Hidvegi Message-Id: <199607121743.TAA10268@bolyai.cs.elte.hu> Subject: Re: Bug Report: Env Vars and shell functions To: schaefer@nbn.com Date: Fri, 12 Jul 1996 19:43:30 +0200 (MET DST) Cc: zsh-workers@math.gatech.edu, pws@ifh.de In-Reply-To: <960712101804.ZM15374@candle.brasslantern.com> from Bart Schaefer at "Jul 12, 96 10:18:00 am" Organization: Dept. of Comp. Sci., Eotvos University, Budapest, Hungary Phone: (36 1)2669833 ext: 2667, home phone: (36 1) 2752368 X-Mailer: ELM [version 2.4ME+ PL16 (25)] MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Resent-Message-ID: <"qHPpD.0.M54.bxevn"@euclid> Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/1635 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu > } And it also says that shell functions should be handled similarily to > } special builtins (which means that recent patches from Peter and me make > } zsh less conformant). > > But more intuitive. I suspect POSIX was merely codifying existing sh/ksh > behavior there. I agree. > } Zsh currently treats a builtin this way > > Clarity: Zsh treats a builtin the way it treats a shell function ... Not, the question is wether FOO=bar builtin should affect the shell environment or not. > } only if the BINF_MAGICEQUALS flag > } is set for the builtin. These builtins are: alias, declare, hash, integer, > } local, readonly and typeset. [...] > } Also note that command arguments are evaluated before variable assignments > } so the above example will never work. > > Has this always been the case? (Peter?) Is this correct according to > POSIX? Of what use is the BINF_MAGICEQUALS behavior if the args are > evaluated before the variable gets assigned? I think it has. Substitution is always done in the current shell environment while FOO=bar something type assignments are done after fork() (that's why they are local). Of course fork() is not called for builtins and functions but the behaviour should be similar (in the future some new builtins may be added as a builtin replacement for external commands and that change sould be transparent). > Hmm. So `command typeset foo=bar ; echo $foo' has what effect in POSIX? The command prefix makes special builtins behave like external commands. So command typeset foo=bar is probably a no-op in POSIX. It is a no-op in pdksh but not in bash and ksh93. But what I really meant is that in POSIX (and in zsh too) FOO=bar export FOO exports foo but FOO=bar command export FOO is just a no-op. Bash does not know that but ksh93 and pdksh do. > } I'm writing these because these differences between zsh and POSIX are > } probably the most important ones. > > Perhaps that means they should be recorded somewhere, maybe Etc/BUGS or > a new file? (Where's the wish-list/ToDo-list nowadays?) I'd like to add a COMPATIBILITY section to the manual where these things will be documented. Unfortunately at the moment I'm quite busyly fixing the zsh code which I consider more important. Zoltan