给定 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#是以前导零开头的数字否则会被解释为八进制。
指定基数的语法要求在基数说明符之前有负号(如果有)。
$ 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)
输出-8与b=-009和。10b=009