From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12369 invoked from network); 17 Jun 2008 14:36:20 -0000 X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-01-01) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.2.4 Received: from news.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.88) by ns1.primenet.com.au with SMTP; 17 Jun 2008 14:36:20 -0000 Received-SPF: none (ns1.primenet.com.au: domain at sunsite.dk does not designate permitted sender hosts) Received: (qmail 62665 invoked from network); 17 Jun 2008 14:36:17 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 17 Jun 2008 14:36:17 -0000 Received: (qmail 29224 invoked by alias); 17 Jun 2008 14:36:14 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 25196 Received: (qmail 29210 invoked from network); 17 Jun 2008 14:36:14 -0000 Received: from bifrost.dotsrc.org (130.225.254.106) by sunsite.dk with SMTP; 17 Jun 2008 14:36:14 -0000 Received: from mail.o2.co.uk (jabba.london.02.net [82.132.130.169]) by bifrost.dotsrc.org (Postfix) with ESMTP id 05A9680525A4 for ; Tue, 17 Jun 2008 16:36:00 +0200 (CEST) Received: from sc.homeunix.net (78.105.216.138) by mail.o2.co.uk (8.0.013.3) (authenticated as stephane.chazelas) id 4851DD9500CB1C0E; Tue, 17 Jun 2008 15:36:00 +0100 Received: from chazelas by sc.homeunix.net with local (Exim 4.69) (envelope-from ) id 1K8cHv-0002Xr-EP; Tue, 17 Jun 2008 15:35:59 +0100 Date: Tue, 17 Jun 2008 15:35:59 +0100 From: Stephane Chazelas To: Zsh hackers list , Richard Hartmann , Peter Stephenson Subject: Re: arithmetic operator precedence Message-ID: <20080617143559.GP5016@sc.homeunix.net> Mail-Followup-To: Zsh hackers list , Richard Hartmann , Peter Stephenson References: <20080616080726.GP10734@prunille.vinc17.org> <20080616144211.276fb0e3@pws-pc> <2d460de70806170219k12ff4cadn441b52c48bf8076f@mail.gmail.com> <20080617094509.GC5016@sc.homeunix.net> <20080617111934.GE10734@prunille.vinc17.org> <20080617115742.GE5016@sc.homeunix.net> <20080617123551.GJ10734@prunille.vinc17.org> <20080617124607.GH5016@sc.homeunix.net> <20080617130246.GL10734@prunille.vinc17.org> <20080617132039.GK5016@sc.homeunix.net> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20080617132039.GK5016@sc.homeunix.net> User-Agent: Mutt/1.5.16 (2007-09-19) X-Virus-Scanned: ClamAV 0.92.1/7494/Tue Jun 17 06:46:03 2008 on bifrost X-Virus-Status: Clean On Tue, Jun 17, 2008 at 02:20:39PM +0100, Stephane Chazelas wrote: > On Tue, Jun 17, 2008 at 03:02:46PM +0200, Vincent Lefevre wrote: > [...] > > It is unspecified. So, the shell is right to choose how it sees it. > > > > > If $a contains an integer constant such as -3, then as per > > > POSIX, $((a * 3)) should be the same as $(($a * 3)), that is > > > $((-3 * 3)). > > > > No, POSIX does not say that. It happens to be the same thing here > > just because of the properties of *, but you can't deduce anything > > for extensions. > > It says $((x)) is meant to be the same as $(($x)) which I > understand as any occurrance of a variable name (other than $-, > $?, $0... obviously) in $((...)) should be the same as if the $ > was not ommited (when $x contains an integer constant). [...] It can't be that simple though, as in x=-1; $((1 x)) which would be POSIX but fails in all shells. Or x=1; $((x = 1 + x)) which obviously is not meant to be the same as $(($x = 1 + $x)) So that If the shell variable x contains a value that forms a valid integer constant, then the arithmetic expansions "$((x))" and "$(($x))" shall return the same value. says either too little or too much to be useful. -- Stéphane