有人可以解释如何在此bash代码中生成数字2909
吗?以及如何在没有sed / awk / dc的情况下修复它。
s="05535"
echo $(( s ))
>> 2909
目前这是我的代码,我不喜欢。
s=$(echo "$s 0 -p" | dc)
答案 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