Bash

如何將(十進制)變數(前導零)的值增加+1?

  • October 13, 2019

我有一個名為 Build.number 的文件,其內容值為012,我需要將其增加 +1。所以,我試過這個

BN=$($cat Build.number)
BN=$(($BN+1))
echo $BN >Build.number

但是在這裡,當我期待013時,我得到的值是 11 。誰能幫我?

前導 0 導致 Bash將該值解釋為八進制值;八進制 012 是十進制的 10,所以你得到 11。

要強制使用小數,請添加10#(只要數字沒有前導符號):

BN=10#$(cat Build.number)
echo $((++BN)) > Build.number

要使用至少三位數字列印號碼,請使用printf

printf "%.3d\n" $((++BN)) > Build.number

bash``0在其算術表達式中以八進制數開頭的常量,011實際上也是如此9

這實際上是 POSIX 要求。

其他一些 shell 喜歡mkshzsh忽略它(除非在 POSIX 兼容模式下),因為它阻礙的頻率遠遠超過它的用處。

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

bash中,您可以使用BN=$((10#$(<Build.number))),只要數字不以-or開頭,它就可以工作+

引用自:https://unix.stackexchange.com/questions/545909