Bash
如何將(十進制)變數(前導零)的值增加+1?
我有一個名為 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 喜歡
mksh
或zsh
忽略它(除非在 POSIX 兼容模式下),因為它阻礙的頻率遠遠超過它的用處。有
ksh93
,BN=011; echo "$(($BN))"
輸出9
, 但echo "$((BN))"
輸出 11。在
bash
中,您可以使用BN=$((10#$(<Build.number)))
,只要數字不以-
or開頭,它就可以工作+
。