shell脚本获取时间戳偶尔报错value too great for base
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本获取时间戳偶尔报错value too great for base相关的知识,希望对你有一定的参考价值。
参考技术A 在linux Shell中并没有毫秒级的时间单位,只有秒和纳秒。所以在shell中可以获取秒级时间戳,但是不能获取毫秒级时间戳。有时候确实需要毫秒级时间戳,于是使用秒和纳秒的时间戳来组合一下。通常我们看到的都是如下写法:
这个方法你快速地反复去执行,大概五六次就会出现一次报错 value too great for base 。
date '+%N' 获取纳秒时获取的是一个字符串,而不是数字,且为了保证九位数,前面会补0,例如 073526864 。遇到首字母为0的字符串,shell正常的除法不能自动将其转换为数字(是的,虽然你看不到有数据类型,但是他是分数字和字符串类型的,并且使用的时候一般都隐含了类型转换,lua也有这个问题,被坑过无数次)。
使用 expr命令 。
需要注意的是乘法符号 * 需要写成 \* ,不然无法识别为乘法符号。
以上是关于shell脚本获取时间戳偶尔报错value too great for base的主要内容,如果未能解决你的问题,请参考以下文章
关于Shell脚本if 报错:[: too many arguments
关于Shell脚本if 报错:[: too many arguments
Shell脚本中有关数据进制的问题(value too great for base (error token is "08"))