shell脚本报错——value too great for base

解决shell脚本的八进制和十进制转换的问题

使用linx shell编程时遇到进制问题的报错“value too great for base”:

for a in {001..009}; do
b=$(printf "%03d" $(($a+1)))
if [[ -f "./$a.cds" ]] && [[ -f "./$b.cds" ]]; then
echo "python3 -m jcvi.compara.catalog ortholog NH$a NH$b --cscore=.99 --no_strip_names"
fi
done

attachments-2023-11-FKUttfhF654b213424e35.png

这是因为shell在进行数值的计算时,0开头的数字被默认为八进制数字,而8进制数中合法的最大的数字是“7”,所以当出现08 和09时会被认为超过了八进制数字的范围,解决办法是通过添加“10#”让shell将"08"和“09”当做十进制数字来解读。

将脚本改成:b=$(printf "%03d" $((10#$a+1)))

这样就不会报错啦:

attachments-2023-11-xkoUBVxG654b20d9eaba0.png

参考:https://blog.csdn.net/czl689/article/details/121718489


  • 发表于 2023-11-08 13:50
  • 阅读 ( 1160 )
  • 分类:linux

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
每天学习一点点
每天学习一点点

53 篇文章

作家榜 »

  1. omicsgene 702 文章
  2. 安生水 350 文章
  3. Daitoue 167 文章
  4. 生物女学霸 120 文章
  5. xun 82 文章
  6. 红橙子 78 文章
  7. rzx 76 文章
  8. CORNERSTONE 72 文章