将字符串Bash为数字,其中数字以零结尾

时间:2015-04-06 16:43:47

标签: bash

有人可以解释如何在此bash代码中生成数字2909吗?以及如何在没有sed / awk / dc的情况下修复它。

s="05535"
echo $(( s ))
>> 2909

目前这是我的代码,我不喜欢。

s=$(echo "$s 0 -p" | dc)

2 个答案:

答案 0 :(得分:2)

2909是八进制05535的十进制值(基数为10)。

0开始的任何数字都被视为八进制值,((..))默认打印十进制值。

要保持数字的十进制值使用(感谢@thatotherguy):

s="05535"
echo $(( 10#$s ))
5535

答案 1 :(得分:0)

除了其他方法之外,简单的字符串索引可以提供测试和转换:

[ ${s:0:1} -eq 0 ] && s=${s:1}

如果您担心多个前导0,那么

 while [ ${s:0:1} -eq 0 ]; do s=${s:1}; done