如何将(十进制)变量(前导零)的值增加 +1?

Nai*_*aik 13 bash shell-script arithmetic numeric-data

我有一个名为 Build.number 的文件,内容值为012,我需要将其增加 +1。所以,我试过这个

BN=$($cat Build.number)
BN=$(($BN+1))
echo $BN >Build.number
Run Code Online (Sandbox Code Playgroud)

但在这里,当我期待013时,我得到了值 11 。谁能帮我?

Ste*_*itt 32

前导 0 使 Bash将该值解释为八进制值;012 八进制是十进制,所以你得到 11。

要强制使用小数,请添加10#(只要数字没有前导符号):

BN=10#$(cat Build.number)
echo $((++BN)) > Build.number
Run Code Online (Sandbox Code Playgroud)

要使用至少三位数字打印数字,请使用printf:

printf "%.3d\n" $((++BN)) > Build.number
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 18

bash对待常数与开始0在其算术表达式八进制数,所以011实际上是9。

这实际上是 POSIX 要求。

其他一些 shell 喜欢mksh或zsh忽略它(除非在 POSIX 兼容模式下),因为它比它有用得多。

与ksh93,BN=011; echo "$(($BN))"输出9,但echo "$((BN))"输出 11。

在 中bash,您可以使用BN=$((10#$(<Build.number))),只要数字不以-或开头就可以使用+。