提取FEW080时遇Value too Great for Base错误,求去前导零方案
解决bash脚本中前导零数字触发的"Value too Great for Base"错误
你的判断完全正确:bash会将带前导零的数字默认解析为八进制数,而八进制数只允许0-7的数字,080里包含了8,因此触发报错。下面提供两种简洁的解决思路:
方法一:算术运算时强制指定十进制解析
直接在算术表达式中用10#前缀,告诉bash把后续数字当作十进制处理,无需额外去除前导零。同时优化脚本,避免重复执行egrep:
fewClouds=$(egrep -o '\sFEW[0-9]{3}\s' metar.txt | cut -c5-7) if [ -n "$fewClouds" ]; then # 用10#强制按十进制解析数字 fewClouds=$((10#$fewClouds * 100)) printf "\nFew Clouds at %s feet\n" "$fewClouds" fi
方法二:提取数字时直接去除前导零
如果需要先得到无前导零的数字,可以用bash参数扩展或sed处理,同时简化重复操作:
# 先提取完整的FEWxxx条目并去除空格 few_entry=$(egrep -o '\sFEW[0-9]{3}\s' metar.txt | tr -d ' ') if [ -n "$few_entry" ]; then # 提取FEW后面的数字部分 few_num=${few_entry#FEW} # 去除所有前导零,若结果为空则设为0(处理全零场景) few_num=${few_num##+(0)} [ -z "$few_num" ] && few_num=0 fewClouds=$((few_num * 100)) printf "\nFew Clouds at %s feet\n" "$fewClouds" fi
注意:使用
${few_num##+(0)}需要开启bash的扩展通配符,可在脚本开头添加shopt -s extglob,或者替换为sed命令:few_num=$(echo "$few_num" | sed 's/^0*//')
内容的提问来源于stack exchange,提问作者tembo
相关产品推荐
相关产品推荐

