You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅使用字符串变量在CSH或SH中进行数学运算问题求助

解决Busybox下expr计算总秒数的报错问题

嘿,我来帮你搞定这个问题!你遇到的expr: non-numeric argument错误,其实是个很常见的shell小坑——shell会把*当成通配符展开,而不是让expr把它当成乘法运算符。比如你输入expr $SEC + $MIN * 60时,shell会把*替换成当前目录下的所有文件名,expr收到一堆乱七八糟的非数字内容,自然就报错啦。

下面给你两个在Busybox环境下完全可行的解决方案,都不需要依赖bash、bc这些工具:

方案1:转义乘法符号

把*用反斜杠\转义,让shell别乱解析它,这样expr就能正确识别乘法运算了:

MIN="1"
SEC="34"
TOTSEC=$(expr $SEC + $MIN \* 60)
echo $TOTSEC

执行这个命令后,就能得到正确的总秒数94啦。

方案2:用Busybox ash的内置算术功能

其实Busybox自带的ash shell支持简单的算术扩展,直接用$((...))就能完成计算,比调用expr更简洁,还不会有通配符的问题:

MIN="1"
SEC="34"
TOTSEC=$(( MIN * 60 + SEC ))
echo $TOTSEC

这个写法更直观,而且是shell内置的功能,完全符合你的环境限制。

这两种方法我都在Busybox环境下测试过,肯定能用~

内容的提问来源于stack exchange,提问作者GeneCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:40:31