Bash:对带前导零的负整数执行数学运算

Dav*_*idH 3 bash

给定 bash 中的数学运算,例如

a=$(( ${b} + 1 ))

如何处理b可以为正数或负数并带有前导零的情况?如果我尝试

a=$(( 10#${b} + 1 ))

对于b=009,这是成功的。但如果我尝试同样的操作b=-001,则会返回错误:

10#: invalid integer constant (error token is "10#")

那么有没有一种方法可以在一行中处理此类情况呢?或者有没有办法检查是否b小于0?对于后一个选项,我尝试过

[[ $b < 0 ]] && a=$(( ${b} + 1 )) || a=$(( 10#${b} + 1 ))

但这会在条件 ifb大于或等于中遇到类似的错误008

PS:我需要前缀的原因10#是以前导零开头的数字否则会被解释为八进制。

joa*_*nis 6

指定基数的语法要求在基数说明符之前有负号(如果有)。

$ echo $(( -10#0123 + 1 ))
-122
Run Code Online (Sandbox Code Playgroud)

所以这样的事情可以工作:

b=-009
b_with_base="10#$b"
echo $(( ${b_with_base/10#-/-10#} + 1 ))
Run Code Online (Sandbox Code Playgroud)

输出-8b=-009和。10b=009