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))),只要数字不以-或开头就可以使用+。
| 归档时间: |
|
| 查看次数: |
2819 次 |
| 最近记录: |