From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10264 invoked by alias); 21 Apr 2017 20:05:30 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 40995 Received: (qmail 15498 invoked from network); 21 Apr 2017 20:05:30 -0000 X-Qmail-Scanner-Diagnostics: from know-smtprelay-omc-2.server.virginmedia.net by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(80.0.253.66):SA:0(-2.8/5.0):. Processed in 4.685532 secs); 21 Apr 2017 20:05:30 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_PASS,T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: p.w.stephenson@ntlworld.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _smtprelay.virginmedia.com designates 80.0.253.66 as permitted sender) X-Originating-IP: [86.21.219.59] X-Authenticated-User: p.w.stephenson@ntlworld.com X-Spam: 0 X-Authority: v=2.1 cv=V+eAqrTi c=1 sm=1 tr=0 a=utowdAHh8RITBM/6U1BPxA==:117 a=utowdAHh8RITBM/6U1BPxA==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=kj9zAlcOel0A:10 a=P5Q6L1DsAAAA:8 a=pkbVin9yHUnDmgmspEMA:9 a=CjuIK1q_8ugA:10 a=jxi25fIUQso1YTL4nQQM:22 Date: Fri, 21 Apr 2017 20:58:15 +0100 From: Peter Stephenson To: zsh-workers@zsh.org Subject: Re: Alias expansion inconsistency in $(command substitutions) with IGNORE_CLOSE_BRACES Message-ID: <20170421205815.11935aed@ntlworld.com> In-Reply-To: <131b162a-b1f8-998c-e5ca-6a161dfef16f@inlv.org> References: <131b162a-b1f8-998c-e5ca-6a161dfef16f@inlv.org> X-Mailer: Claws Mail 3.11.1 (GTK+ 2.24.28; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ntlworld.com; s=meg.feb2017; t=1492804696; bh=jXFWAISe0h/TEnUQoPJoT+6huTqpzC3UIt1Hu//htPo=; h=Date:From:To:Subject:In-Reply-To:References; b=sp10dYinYnLbY1ZJPpXkdO5byHTeaYlycZ7vprvHkdRPO5upgK/gtTwiZZ5ibb/LL er6iYjfwv1O/Xb43tl2IjkDhCAfhGPw1iu0LJEqo7DX5gWc2jJquBwRKOinCaZsrNA Qvm+bauo8heHOChCnDl7SBMqnxmyqZwW36xDVUsIgRDv62OxhzbnVHcb0eJ1WDnuvw hMseoYnHHKCldvJe2DfI7p0rXmrXSRumOUsSFyXFjUdhUi5yVWZxorMKaggoFohU2/ Z8+VF/mRZgfH13IPhGIDcS+CX6JBRklsF00/nsrDrCHFg71ZN+HLTxbK1VkW475MCm txboq+2RxWy6g== On Sun, 16 Apr 2017 17:07:09 +0100 Martijn Dekker wrote: > If either the IGNORE_CLOSE_BRACES or IGNORE_BRACES option is active, > there is an inconsistency in alias expansion within command > substitutions, specifically those of the form $(command). > > Given: > > % set -o ignoreclosebraces > % alias OPEN='{' CLOSE='};' > > These work fine: > > % { OPEN echo hi; CLOSE } > hi > % var=`{ OPEN echo hi; CLOSE }` && echo "$var" > hi > > But this does not: > > % var=$({ OPEN echo hi; CLOSE }) && echo "$var" We are too cavalier in our initial parsing to determine where the command substitution ends. pws diff --git a/Src/lex.c b/Src/lex.c index 59e9d14..b2d9b3f 100644 --- a/Src/lex.c +++ b/Src/lex.c @@ -2060,9 +2060,7 @@ skipcomm(void) int new_lexstop, new_lex_add_raw; int save_infor = infor; struct lexbufstate new_lexbuf; - int noalias = noaliases; - noaliases = 1; infor = 0; cmdpush(CS_CMDSUBST); SETPARBEGIN @@ -2189,7 +2187,6 @@ skipcomm(void) SETPAREND cmdpop(); infor = save_infor; - noaliases = noalias; return lexstop; #endif diff --git a/Test/D08cmdsubst.ztst b/Test/D08cmdsubst.ztst index 3625373..4e0759e 100644 --- a/Test/D08cmdsubst.ztst +++ b/Test/D08cmdsubst.ztst @@ -167,3 +167,13 @@ empty=$() && print "'$empty'" 0:Empty $() is a valid assignment >'' + + ( + setopt ignoreclosebraces + alias OPEN='{' CLOSE='};' + eval '{ OPEN print hi; CLOSE } + var=$({ OPEN print bye; CLOSE}) && print $var' + ) +0:Alias expansion needed in parsing substituions +>hi +>bye