Path: csiph.com!xmission!news.snarked.org!news.linkpendium.com!news.linkpendium.com!panix!usenet.stanford.edu!not-for-mail From: Ilkka Virta Newsgroups: gnu.bash.bug Subject: Re: Arithmetic evaluation of negative numbers with base prefix Date: Tue, 18 Jun 2019 08:52:59 +0300 Lines: 88 Approved: bug-bash@gnu.org Message-ID: References: <20190614141947.GB27242@tower> <20190617133026.GC27242@tower> <20190617154708.GG2072@eeg.ccf.org> NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------4E25F219D1DF45FC7B334C60" X-Trace: usenet.stanford.edu 1560837201 8846 209.51.188.17 (18 Jun 2019 05:53:21 GMT) X-Complaints-To: action@cs.stanford.edu Cc: bug-bash@gnu.org To: Chet Ramey Envelope-to: bug-bash@gnu.org User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:60.0) Gecko/20100101 Thunderbird/60.7.1 In-Reply-To: <20190617154708.GG2072@eeg.ccf.org> Content-Language: en-US X-SASI-RCODE: 200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; h=subject:to:references:from:cc:message-id:date:mime-version:in-reply-to:content-type; s=smtp; bh=z79BeUtSuj8qTTThuc+AbnLphqFJaEmu8PD3jKnrGj4=; b=LTkJnrgkPI//ywhsCWZNjZliNpVRaL0H16cGMatbZz90v4P3tVDJThxf6o/7p7nuktvGf7V5m/hNVoCleCd7s2Gq5Utua9NmwXYcPZb7ybV1ZRtjF0resl0PzALm9DgIfegMSoFhod11GfVhktt2h90gfvRxfdrpTyZROZp4AiHBKabHCRJiFXwzG83pUml0yFOlYY+ljlP11d90rtcDUrGpZv55jycLbENSzJZCuaj2roJ6JX7/bDl3PxREalTrihIs+lEMlviNmGaDwWTLZfVdMLHTHcbDSIoKhLnuWDodGnbrPbxWKnGUBFbRRPj+Eoy3K+n6hYdfZdDX6giNaw== X-detected-operating-system: by eggs.gnu.org: FreeBSD 8.x X-Received-From: 157.24.2.213 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: X-Mailman-Original-References: <20190614141947.GB27242@tower> <20190617133026.GC27242@tower> <20190617154708.GG2072@eeg.ccf.org> Xref: csiph.com gnu.bash.bug:15054 This is a multi-part message in MIME format. --------------4E25F219D1DF45FC7B334C60 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit On 17.6. 18:47, Greg Wooledge wrote: > On Mon, Jun 17, 2019 at 02:30:27PM +0100, Jeremy Townshend wrote: >> In the meantime it would seem cautionary to advise against the pitfall of >> using base# prefixed to variables (contrary to >> mywiki.wooledge.org/ArithmeticExpression) unless you can be confident that >> they will never be decremented below zero. > > Fair point. I've updated > and . Good! I still wish this could be fixed to do the useful thing without any workarounds, given it's what ksh and zsh do, and since this is the second time it comes up on the list, it appears to be surprising to users, too. The # prefix is already an extension of the C numeric constant syntax, so extending it further to include an optional sign wouldn't seem in inappropriate. I took a look last night and made some sort of a patch. It seems to work, though I'm not sure if I've missed any corner cases. Apart from the digitless '10#', the behaviour matches ksh and zsh, I made it an error, they apparently allow it. $ cat test.sh echo $(( 10 * 10#-123 )) # -1230 echo $(( 10 * 10#-008 )) # -80 echo $(( 10 * 10#1+23 )) # 10*1 + 23 = 33 echo $(( 10# )) # error $ ./bash test.sh -1230 -80 33 test.sh: line 5: 10#: no digits in number (error token is "10#") $ ksh test.sh -1230 -80 33 0 -- Ilkka Virta / itvirta@iki.fi --------------4E25F219D1DF45FC7B334C60 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="expr-allow-sign.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="expr-allow-sign.c" LS0tIGV4cHIuYy5vcmlnCTIwMTgtMTItMTcgMTY6MzI6MjEuMDAwMDAwMDAwICswMjAwCisr KyBleHByLmMJMjAxOS0wNi0xOCAwODozMDozMS4xMTA4NTE2NjYgKzAzMDAKQEAgLTEzODYs OCArMTM4NiwxMiBAQCByZWFkdG9rICgpCiAgICAgfQogICBlbHNlIGlmIChESUdJVChjKSkK ICAgICB7Ci0gICAgICB3aGlsZSAoSVNBTE5VTSAoYykgfHwgYyA9PSAnIycgfHwgYyA9PSAn QCcgfHwgYyA9PSAnXycpCi0JYyA9ICpjcCsrOworICAgICAgdW5zaWduZWQgY2hhciBwcmV2 YyA9IGM7CisgICAgICB3aGlsZSAoSVNBTE5VTSAoYykgfHwgYyA9PSAnIycgfHwgYyA9PSAn QCcgfHwgYyA9PSAnXycgfHwgKChjID09ICcrJyB8fCBjID09ICctJykgJiYgcHJldmMgPT0g JyMnKSkgCisgICAgICAgIHsKKyAgICAgICAgICBwcmV2YyA9IGM7CisgICAgICAgICAgYyA9 ICpjcCsrOworICAgICAgICB9CiAKICAgICAgIGMgPSAqLS1jcDsKICAgICAgICpjcCA9ICdc MCc7CkBAIC0xNTMxLDYgKzE1MzUsOCBAQCBzdHJsb25nIChudW0pCiAgIHJlZ2lzdGVyIGNo YXIgKnM7CiAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgYzsKICAgaW50IGJhc2UsIGZvdW5k YmFzZTsKKyAgaW50IGRpZ2l0cyA9IDA7CisgIGNoYXIgc2lnbiA9IDA7CiAgIGludG1heF90 IHZhbDsKIAogICBzID0gbnVtOwpAQCAtMTU2OSw4ICsxNTc1LDE2IEBAIHN0cmxvbmcgKG51 bSkKIAogCSAgYmFzZSA9IHZhbDsKIAkgIHZhbCA9IDA7CisJICBkaWdpdHMgPSAwOwogCSAg Zm91bmRiYXNlKys7CiAJfQorICAgICAgZWxzZSBpZiAoYyA9PSAnLScgfHwgYyA9PSAnKycp CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoZGlnaXRzID4gMCB8fCBzaWduICE9IDApCisg ICAgICAgICAgICBldmFsZXJyb3IgKF8oImludmFsaWQgbnVtYmVyIikpOworICAgICAgICAg IAorICAgICAgICAgIHNpZ24gPSBjOworICAgICAgICB9CiAgICAgICBlbHNlIGlmIChJU0FM TlVNKGMpIHx8IChjID09ICdfJykgfHwgKGMgPT0gJ0AnKSkKIAl7CiAJICBpZiAoRElHSVQo YykpCkBAIC0xNTg4LDExICsxNjAyLDE4IEBAIHN0cmxvbmcgKG51bSkKIAkgICAgZXZhbGVy cm9yIChfKCJ2YWx1ZSB0b28gZ3JlYXQgZm9yIGJhc2UiKSk7CiAKIAkgIHZhbCA9ICh2YWwg KiBiYXNlKSArIGM7CisJICBkaWdpdHMrKzsKIAl9CiAgICAgICBlbHNlCiAJYnJlYWs7CiAg ICAgfQogCisgIGlmIChzaWduID09ICctJykKKyAgICB2YWwgKj0gLTE7CisgIAorICBpZiAo ZGlnaXRzID09IDApCisgICAgZXZhbGVycm9yIChfKCJubyBkaWdpdHMgaW4gbnVtYmVyIikp OworICAgIAogICByZXR1cm4gKHZhbCk7CiB9CiAK --------------4E25F219D1DF45FC7B334C60--