仅使用字符串变量在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
相关产品推荐
相关产品推荐

