使用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
这是因为shell在进行数值的计算时,0开头的数字被默认为八进制数字,而8进制数中合法的最大的数字是“7”,所以当出现08 和09时会被认为超过了八进制数字的范围,解决办法是通过添加“10#”让shell将"08"和“09”当做十进制数字来解读。
将脚本改成:b=$(printf "%03d" $((10#$a+1)))
这样就不会报错啦:
参考:https://blog.csdn.net/czl689/article/details/121718489
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!