Path: csiph.com!3.us.feeder.erje.net!feeder.erje.net!news.snarked.org!news.linkpendium.com!news.linkpendium.com!panix!usenet.stanford.edu!not-for-mail From: Chet Ramey Newsgroups: gnu.bash.bug Subject: Re: Backslash missing in brace expansion Date: Fri, 6 Dec 2019 09:12:28 -0800 Organization: ITS, Case Western Reserve University Lines: 43 Approved: bug-bash@gnu.org Message-ID: References: <20191205201157.cd481936f76d95bbdfabc73c@schrader-schulte.de> <662e2328-f331-c554-afcf-fd3819f6beab@case.edu> <20191206055304.076d6115afa3a4f2a6a21c34@schrader-schulte.de> <21eaf3f9-a9f3-80c0-039d-2ba9ded1cf0f@case.edu> 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 1575652363 24920 209.51.188.17 (6 Dec 2019 17:12:43 GMT) X-Complaints-To: action@cs.stanford.edu Cc: chet.ramey@case.edu To: Martin Schulte , bug-bash@gnu.org Envelope-to: bug-bash@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=case.edu; s=smtp-primary; t=1575652354; bh=KaSNy6Em7JOhGXEfbB38MRIsrEpaf8EDCROtIpRN84g=; h=Reply-To:Cc:Subject:To:References:From:Message-ID:Date: MIME-Version:In-Reply-To:Content-Type:Content-Transfer-Encoding; b=ToZrCvqXzSOf/Wb3b7EWiUWsbnB+bS7sUPQEDruf3DB67DiyMgaIwgKcW6WKwRuw5E 2GyOBA/dbNJu6VSl+ImGNLbVWQWSpM/IYN5NoK5sFyzd3hnzdCuhXW8ywD8H14opkKA v/E4mlOcn7iagsEQiOfT8HizldLxugIUvnwAoTWQZWV7BBzuN/ITRQZbkQXTVbBzlbz jc68tlI/r0fX9IeVbG5bI+QfJ977OD+mRgH/un0/RdU6oOGJIWvrRohXd94d5ne5UGG 6+OULaOlDwexEZvAS9X/QGwXDA4JuaKwxhEJLt4YdPhGKYqlT1TtnLq7Q5vGAUmpFFd hTFy7Snw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=case.edu; s=smtp-primary; t=1575652352; bh=nnPElWDB3QTlXa19dqweAXuVXQaXOr/sQptMb+Xj65k=; h=Reply-To:Cc:Subject:To:References:From:Message-ID:Date: MIME-Version:In-Reply-To:Content-Type:Content-Transfer-Encoding; b=OUUYl9a4VkIu4ETKJGeY2wA+IocZJTcoqMYTl5CxPXge07xVxqaWbb2XyjB1D3loXL MkYzzq7s0YYt2KjSqke6TsKkiMoy06Rv4frfpUpvWoxwOvIqe8vH+oM/BZra83L+CQy i3nPQVayEy1tqL13OnLVvUgMCLUKsHBIHlby7c6J/8U0oPiCFFfNP+l08eENHA/TUrl JCjl1ubkxJ6WXO4zl7XazeqErXImIlacSNCOUnfG+k8K0DXUT5we6dR2CyAx0XBdUFL F+YDWqykuNil7ii6gRs52triICDjYoGdk/Wa6RSuODp+luAeK/iWHKhURZl95UAj44S t5D16Wqg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=case.edu; s=g-case; h=reply-to:cc:subject:to:references:from:openpgp:autocrypt :organization:message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=nnPElWDB3QTlXa19dqweAXuVXQaXOr/sQptMb+Xj65k=; b=SOCIeQ9/ocL6JnTCHaQNvVC8iybh9bzrdBKXQz9Enu/iqPp2xEj42rPFIFI73ILzEk HzTo+M5nCFdTx+ckpU+sOFRAtMg+9HzncNrWFeMsP8DJ2MwqHL/F3B5dUn4BAxRf4Rj3 RICef64OHSLJov7x2a5y+xL4eZG+uJFqSKzn2LCp45Fkv4uzLdW34fGTDDrdnORULLjw dPu3cnlNnuLec91vUdzWkBLfaChYWi5KOQI4K4nm8vB0pGIML0sNTYFTsqCSkCNBK+V9 kuGY7KkVHa2Z47v7VjH4xrXez+sJiiQ0Rxz68/HHn7nlL44T6EZBE8ew3RjCLLt9Q/I9 xU+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:reply-to:cc:subject:to:references:from:openpgp :autocrypt:organization:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=nnPElWDB3QTlXa19dqweAXuVXQaXOr/sQptMb+Xj65k=; b=JsdzAkwoN+/pcHjpo9PsTwp/187GC8cehjBPqXCNOid+XT0kDGKLbEBLtZP9i0paQ5 XcaMjL6jlQaCb8hEcDJ//ymgAkwC8GhIhHsmEMpvTr/lj6z9YF4C/pUFZzrMr0aG7K8j RN9LG8fLgtdCiS1Slsm6gkZduOFnf5HrUoHcr4xKThNINid/LjtaiFejSvtDP+Z4zeZq 5a2JF0ZfQh5Pq3lXuYPQ9h+jZOHck4GtDdYlzxfII4mSGe1WBuCwJHyRvIWyHYItVIyV n/YUsf64hLruDx/HFpOysqJxW2UwZKLam0TpTsht/acnBMAEyUtFtbjR678jFa1JJIV/ /8CQ== X-Gm-Message-State: APjAAAXWNbbE/bbFL0ot3QmewlkmauV8NxT4IGYuabnPAvEWFTB0eihZ JUeO6ARIQouCKvBqS1uBZqlKxkoTHBMAT82JT/UANu/EXu2f4UL6dVwKR1Hwh0ivZHal47T4Dh5 HmacMrZKyEzk= X-Received: by 2002:a65:530d:: with SMTP id m13mr4610397pgq.351.1575652351277; Fri, 06 Dec 2019 09:12:31 -0800 (PST) X-Google-Smtp-Source: APXvYqxuiL135dKBTZ5fA8M82lwGt3I/xdp79Dkod7Bv6akFZRgqHF+8d9DCQfbDpIHCZIu/lBhK9Q== X-Received: by 2002:a65:530d:: with SMTP id m13mr4610361pgq.351.1575652350811; Fri, 06 Dec 2019 09:12:30 -0800 (PST) Openpgp: preference=signencrypt Autocrypt: addr=chet.ramey@case.edu; prefer-encrypt=mutual; keydata= mQGiBEEOsGwRBACFa0A1oa71HSZLWxAx0svXzhOZNQZOzqHmSuGOG92jIpQpr8DpvgRh40Yp AwdcXb8QG1J5yGAKeevNE1zCFaA725vGSdHUyypHouV0xoWwukYO6qlyyX+2BZU+okBUqoWQ koWxiYaCSfzB2Ln7pmdys1fJhcgBKf3VjWCjd2XJTwCgoFJOwyBFJdugjfwjSoRSwDOIMf0D /iQKqlWhIO1LGpMrGX0il0/x4zj0NAcSwAk7LaPZbN4UPjn5pqGEHBlf1+xDDQCkAoZ/VqES GZragl4VqJfxBr29Ag0UDvNbUbXoxQsARdero1M8GiAIRc50hj7HXFoERwenbNDJL86GPLAQ OTGOCa4W2o29nFfFjQrsrrYHzVtyA/9oyKvTeEMJ7NA3VJdWcmn7gOu0FxEmSNhSoV1T4vP2 1Wf7f5niCCRKQLNyUy0wEApQi4tSysdz+AbgAc0b/bHYVzIf2uO2lIEZQNNt+3g2bmXgloWm W5fsm/di50Gm1l1Na63d3RZ00SeFQos6WEwLUHEB0yp6KXluXLLIZitEJLQwQ2hldCBSYW1l eSAoQ2FzZSBzdGFuZGFyZCkgPGNoZXQucmFtZXlAY2FzZS5lZHU+iF8EExECAB8FAkPi19EC GwMHCwkIBwMCAQMVAgMDFgIBAh4BAheAAAoJELtYafBk6nSrelkAn31Gsuib7GcCZHbv5L5t VKYR9LklAJ4hzUHKA49Z0QXR+qCb80osIcmPSbkBDQRBDrBvEAQAkK6TAOKBEM+EC4j6V/7o /riVZqcgU5cid2qG9TXdwNtD9a3kvA/ObZBO93sX59wc6Bnwo4VJxsOmMlpGrAjJsxNwg3QH akEtf8LXRbVpj5xStdmBdQZUhIQyalo/2/TZq5OijtddUQcL5cs70hTv/FpT3wUvr2Xr8rjF 41IFEz8AAwcD/A0CZEGlzIrT5WCBnl6xBog/8vKiUCbarByat3d1mL6DbizvKNXQRTC9E/vE dENAWCQCjr75Bu55xT8n3SXGtWdDC5xmZ/P3OBYORP8yl8H8I1FIosWOFirbIeYdZPq8SPD1 HL+EXo9zSiHVrrZRJ19ooCKKbSdXHFCY+aJG+0KZiEkEGBECAAkFAkEOsG8CGwwACgkQu1hp 8GTqdKvjcACfZlkVCDwaz/NTO9cy3t69oWpVPNwAnRwe0qk/WL/gfhH346xh5B3HFbFN User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 In-Reply-To: <20191206055304.076d6115afa3a4f2a6a21c34@schrader-schulte.de> Content-Language: en-US X-Junkmail-Status: score=7/90, host=mpv2-2015.case.edu X-Junkmail-PrAS-Raw: score=7/90, refid=2.7.2:2019.12.6.160617:17:7.944, ip=, rules=__YOUTUBE_RCVD, DKIM_SIGNATURE, __X_GOOGLE_DKIM_SIGNATURE, __HAS_REPLYTO, __HAS_CC_HDR, __SUBJ_REPLY, __BOUNCE_CHALLENGE_SUBJ, __BOUNCE_NDR_SUBJ_EXEMPT, __SUBJ_ALPHA_END, __TO_MALFORMED_2, __TO_NAME, __TO_NAME_DIFF_FROM_ACC, __HAS_REFERENCES, __REFERENCES, __HAS_FROM, FROM_EDU_TLD, __HAS_MSGID, __SANE_MSGID, DATE_TZ_NA, __USER_AGENT, __MOZILLA_USER_AGENT, __MIME_VERSION, __IN_REP_TO, __CT, __CT_TEXT_PLAIN, __CTE, __REPLYTO_SAMEAS_FROM_ADDY, __REPLYTO_SAMEAS_FROM_ACC, __FROM_DOMAIN_IN_ANY_CC1, __FROM_DOMAIN_IN_ANY_CC2, __REPLYTO_SAMEAS_FROM_DOMAIN, __DKIM_ALIGNS_1, __DKIM_ALIGNS_2, __ANY_URI, __URI_MAILTO, __URI_WITH_PATH, __URI_NO_WWW, __CP_URI_IN_BODY, __INVOICE_MULTILINGUAL, __FRAUD_MONEY_CURRENCY_DOLLAR, __SUBJ_ALPHA_NEGATE, __URI_IN_BODY, __URI_NOT_IMG, __FORWARDED_MSG, __BODY_NO_MAILTO, __NO_HTML_TAG_RAW, BODY_SIZE_1700_1799, [TRUNCATED], so=2010-03-03 19:42:08, dmn=2016-08-03-0138 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] [fuzzy] X-Received-From: 129.22.103.227 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Bug reports for the GNU Bourne Again SHell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: <21eaf3f9-a9f3-80c0-039d-2ba9ded1cf0f@case.edu> X-Mailman-Original-References: <20191205201157.cd481936f76d95bbdfabc73c@schrader-schulte.de> <662e2328-f331-c554-afcf-fd3819f6beab@case.edu> <20191206055304.076d6115afa3a4f2a6a21c34@schrader-schulte.de> Xref: csiph.com gnu.bash.bug:15699 On 12/5/19 8:53 PM, Martin Schulte wrote: >> It's an unquoted backslash, which is removed by quote removal when the >> words are expanded. Look at the extra space between `[' and `]'; that's >> the null argument resulting from the unquoted backslash. > > Yes - sure. But then I'm wondering why the unquoted backtick doesn't > start command substitution: > > $ echo {Z..a} > Z [ ] ^ _ ` a > $ echo Z [ \ ] ^ _ ` a >> It's a reasonable question. The short answer is that brace expansion takes place after parsing and results in multiple words. Look at it this way. When the parser is reading a simple command, it applies certain rules (matching quotes, metacharacter recognition, etc.) and produces a list of words, which the shell expands and executes. Brace expansion is similar in that it takes a single word and produces a list of words which are then run through word expansion, but it does not apply the same rules as the parser (or any rules, really). What you end up with is a list of words: [, \, ], ^, _, `. a . Each of those words is expanded as usual. When you get to the word that consists of the single character "`", the expansion code checks whether or not it's a valid command substitution, and, finding it's a single "`" instead, leaves it unchanged. The single backslash, as I explained earlier, is removed, resulting in a null word after expansion. This is an example of how you can use brace expansion to produce words the parser would never have passed as valid. Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU chet@case.edu http://tiswww.cwru.edu/~chet/