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: Number with sign is read as octal despite a leading 10# Date: Tue, 10 Jul 2018 13:44:07 +0300 Lines: 66 Approved: bug-bash@gnu.org Message-ID: References: NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: usenet.stanford.edu 1531219466 25167 208.118.235.17 (10 Jul 2018 10:44:26 GMT) X-Complaints-To: action@cs.stanford.edu To: Clint Hepner , bug-bash@gnu.org, bash@packages.debian.org, Isaac Marcos Envelope-to: bug-bash@gnu.org User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:52.0) Gecko/20100101 Thunderbird/52.9.0 In-Reply-To: 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:message-id:date:mime-version:in-reply-to:content-type:content-transfer-encoding; s=smtp; bh=uyOvMZ8J7YEPIeVZux6jsHHnjIHbIZwiaNs0J4wKptY=; b=s5fMYrsdsHi/DqfotTkFZ8rjjAdCeLhinwAiOBzeHlOWS4GbW6jZPHXO9qg6xnxeqbpyG0SB0+ed5NSewV35zVUgOG1ATb/3Hr0LZ+5GhcbNEooOpOz8Ejr4SoVNdqzFDJetkTNtrUYhl4Ll9sSLezNhqVAODCiQtN0WtsAYtrJopeKLbCjW3yGH68W6CUEUpFfSCaCuaHo/RgfotaJoEwNmiro/5vkKNcJJmkixatn/dDNY5FhdW4prC1TvEHIRvg1louggZ6eRhWbbv691+F6/LiqocaJqCq986fp4Ev0Cbo1SsQR6F0SuGtVBMpME4digZu1Gc4NyISgDkR6KZA== X-detected-operating-system: by eggs.gnu.org: FreeBSD 8.x [fuzzy] X-Received-From: 157.24.2.104 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.21 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:14305 I think the problematic case here is when the number comes as input from some program, which might or might not print a leading sign or leading zeroes, but when we know that the number is, in any case, decimal. E.g. 'date' prints leading zeroes, which is easy enough to handle: hour=$(date +%H) hour=${hour#0} # remove one leading zero, or hour="10#$hour" # make it base-10 The latter works even with more than one leading zero, but neither works with a sign. So, handling numbers like '-00159' gets a bit annoying: $ num='-00159' $ num="${num:0:1}10#${num:1}"; echo $(( num + 1 )) -158 And that's without checking that the sign was there in the first place. Something like that will probably not be too common, but an easier way to force any number to be interpreted in base-10 (regardless of leading zeroes) could be useful. If there is a way, I'd be happy to hear. On 10.7. 04:37, Clint Hepner wrote: > The + is a unary operator, not part of the literal. Write $((+10#0034)) instead. > > -- > Clint > On Jul 9, 2018, 9:24 PM -0400, Isaac Marcos , wrote: >> Configuration Information [Automatically generated, do not change]: >> Machine: x86_64 >> OS: linux-gnu >> Compiler: gcc >> Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' >> -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu' >> -DCONF_VENDOR >> uname output: Linux IO 4.9.0-6-amd64 #1 SMP Debian 4.9.88-1+deb9u1 >> (2018-05-07) x86_64 GNU/Linux >> Machine Type: x86_64-pc-linux-gnu >> >> Bash Version: 4.4 >> Patch Level: 12 >> Release Status: release >> >> Description: >> A value inside an arithmetic expansion is processed as octal despite using >> a 10# preffix. >> >> Repeat-By: >> $ echo $((10#+0034)) >> 28 >> >> Fix: >> Extract optional sign before parsing the number, re-attach after. >> >> -- >> Cases are always threesome: >> Best case, Worst case, and Just in case -- Ilkka Virta / itvirta@iki.fi