Path: csiph.com!usenet.blueworldhosting.com!feeder01.blueworldhosting.com!news.glorb.com!usenet.stanford.edu!not-for-mail From: Chet Ramey Newsgroups: gnu.bash.bug Subject: Re: Command substitution starting with a (()) expression should fail Date: Sun, 31 Jan 2016 19:51:22 -0500 Organization: ITS, Case Western Reserve University Lines: 32 Approved: bug-bash@gnu.org Message-ID: References: Reply-To: chet.ramey@case.edu NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Trace: usenet.stanford.edu 1454287891 30511 208.118.235.17 (1 Feb 2016 00:51:31 GMT) X-Complaints-To: action@cs.stanford.edu Cc: chet.ramey@case.edu To: Michael Diamond , bug-bash@gnu.org Envelope-to: bug-bash@gnu.org User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 In-Reply-To: X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020206.56AEAC0B.0043,ss=1,re=0.000,fgs=0, ip=98.17.231.242, so=2015-08-12 04:07:17, dmn=2011-05-27 18:58:46 X-Mirapoint-Loop-Id: 8fcda1d1153362fc7aa3a674a778083e X-Junkmail-Whitelist: YES (by domain whitelist at mpv1-2015.case.edu) X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020204.56AEAC0B.012C,ss=1,re=0.000,fgs=0, ip=98.17.231.242, so=2015-08-12 04:07:17, dmn=2011-05-27 18:58:46 X-Mirapoint-Loop-Id: d1cbd5e4df9df60f04d5dfa94b8bf5c3 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] [fuzzy] X-Received-From: 129.22.103.226 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Bug reports for the GNU Bourne Again SHell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Xref: csiph.com gnu.bash.bug:12295 On 1/31/16 7:26 PM, Michael Diamond wrote: > Bash Version: 4.3 > Patch Level: 39 > Release Status: release > > Description: > I'm told $((( $exit_code == 0 )) && echo GREEN || echo RED) should fail > to parse, because $(( should be the first token, not $(. The way I read Posix, the bash behavior is allowed: "The syntax of the shell command language has an ambiguity for expansions beginning with "$((", which can introduce an arithmetic expansion or a command substitution that starts with a subshell. Arithmetic expansion has precedence; that is, the shell shall first determine whether it can parse the expansion as an arithmetic expansion and shall only parse the expansion as a command substitution if it determines that it cannot parse the expansion as an arithmetic expansion." One of the criteria bash uses to determine whether it's a valid arithmetic expression is whether or not the parentheses are balanced. It's basically up to the application to remove the ambiguity. Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRU chet@case.edu http://cnswww.cns.cwru.edu/~chet/