仅使用字符串变量对CSH或SH进行数学运算

时间:2018-03-23 01:56:29

标签: string variables math sh csh

我有字符串变量MIN和SEC(分钟和秒)。

MIN = "1"
SEC = "34"

我想对这些进行计算。

  

TOTSEC = MIN * 60 + SEC

我试过了:

expr $ SEC + $ MIN * 60

结果:

  

expr:非数字参数

让我们知道我在自定义微型计算机上运行busybox,因此无法访问bash,bc以及其他解决方案提供的内容。

1 个答案:

答案 0 :(得分:3)

sh中,我认为您的意思是POSIX shell,您最好的选择是使用Arithmetic Expansion

$ MIN=1
$ SEC=34
$ TOTSEC=$(( MIN * 60 + SEC ))
$ printf '%d\n' "$TOTSEC"
94

然而,在csh中,内置数学运算方式完全不同:

% set MIN = 1
% set SEC = 34
% @ TOTSEC = ( $MIN * 60 + $SEC )
% printf '%d\n' "$TOTSEC"
94

根据手册页,@命令允许执行数值计算并将结果分配给变量。

请注意,expr命令在shell外部,因此它可以在任何一个中使用。

sh

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

csh

% set TOTSEC = `expr "$MIN" \* 60 + "$SEC"`

注意:您的sh可能不符合POSIX标准。最有可能的是,它是dash和FreeBSD的/bin/sh的祖先。您需要在您的环境中进行测试。