我只想将秒转换回小时n分钟一天。但是我在Minute Equation中遇到错误!它没有评估订单中的大括号!我们如何能够像下面的数学方程那样评估数学方程式。
我想将total_secs除以3600,然后将结果乘以60然后再次找到60的结果模数。
这是我的尝试
#!/bin/ksh
set -x
total_secs=3685;
hour=$(( (total_secs % 3600) ));
minute=$(( (((total_secs / 3600) * 60) % 60) ));
seconds=$(( (((total_secs / 3600) * (60) * (60)) % 60) ));
echo ""$hour":"$minute":"$seconds""
提前致谢
答案 0 :(得分:1)
操作的顺序不是造成问题的原因。根据{{3}},Korn shell具有与C
编程语言相同的优先级和关联性,因此乘法,除法和余数从左到右发生。正确的数学将是:
#!/bin/ksh
total_secs=3685
hour=$(( total_secs / 3600 ))
minute=$(( total_secs / 60 % 60 )) # equivalent to (total_secs / 60) % 60
seconds=$(( total_secs % 60 ))
echo "$hour:$minute:$seconds"
# output 1:1:25
如果要格式化输出,也许可以使用printf
printf "%02d:%02d:%02d\n" $hour $minute $seconds
# output 01:01:25
基本算术运算按以下顺序进行:
*
/
%
+
-
相同优先级的多个操作将从左侧到右侧进行评估,因为它们出现在表达式中。
$(( ((x*y) / z) + n ))
相当于以下任何一种:
$(( x * y / z + n ))
$(( n + x * y / z ))
因为在这两种情况下,*
是最高优先级并且最接近表达式的左侧。第二个是/
,最后是+
。
插入额外的( )
以使您的意图清晰无误,但请记住整个表达必须包含在$(( ))
中。