|
From: | Ilkka Virta |
Subject: | Re: Number with sign is read as octal despite a leading 10# |
Date: | Tue, 10 Jul 2018 13:44:07 +0300 |
User-agent: | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:52.0) Gecko/20100101 Thunderbird/52.9.0 |
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-10The 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 <isaacmarcos100010@gmail.com>, 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
[Prev in Thread] | Current Thread | [Next in Thread] |