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

Gen*_*ode 1 string math variables csh sh

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

MIN = "1"
SEC = "34"
Run Code Online (Sandbox Code Playgroud)

我想对这些进行计算。

TOTSEC = 最小值 * 60 + 秒

我试过:

表达式 $SEC + $MIN * 60

结果:

expr:非数字参数

让大家知道我正在自定义微型计算机上运行 busybox,因此无法访问 bash、bc 和其他解决方案提供的权限。

gho*_*oti 6

在 中sh,我假设您指的是POSIX shell,您最好的选择是使用算术扩展

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

然而csh,内置数学的工作原理却截然不同:

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

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

请注意,该expr命令位于 shell 外部,因此应该可以从任一 shell 中使用它。

sh

$ TOTSEC=$(expr "$MIN" \* 60 + "$SEC")
Run Code Online (Sandbox Code Playgroud)

并在csh

% set TOTSEC = `expr "$MIN" \* 60 + "$SEC"`
Run Code Online (Sandbox Code Playgroud)

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

  • @GeneCode bash 中没有数字类型。`MIN=1` 与 `MIN="1"` 或 `MIN='1'` 完全相同 (2认同)