运行我的bash脚本的这一部分时出现错误
脚本
value=0 for (( t=0; t <= 4; t++ )) do d1=${filedates[$t]} d2=${filedates[$t+1]} ((diff_sec=d2-d1)) SEC=$diff_sec compare=$((${SEC}/(60*60*24))) value=$((value+compare)) done
产量
jad.sh: line 28: ((: 10#2014-01-09: value too great for base (error token is "09") jad.sh: line 30: /(60*60*24): syntax error: operand expected (error token is "/(60*60*24)")
d1和d2是2014-01-09和2014-01-10中的日期
有解决方案吗?
将字符串"10#"添加到变量的前面.这迫使bash将它们视为十进制,即使前导零通常会使它们成为八进制.
什么是d1
和d2
?他们是约会还是秒?
通常,如果您尝试使用包含零前缀的数字(例如09)进行算术运算,则会发生此错误.
例:
$ echo $((09+1)) -bash: 09: value too great for base (error token is "09")
为了使用带有0前缀的数字执行算术,您需要通过指定来告诉bash使用base-10 10#
:
$ echo $((10#09+1)) 10