仅使用字符串变量对 CSH 或 SH 进行数学计算
Do math on CSH or SH only with string variables
我有字符串变量 MIN 和 SEC(分和秒)。
MIN = "1"
SEC = "34"
我想对这些进行计算。
TOTSEC = MIN*60 + SEC
我试过了:
expr $SEC + $MIN * 60
结果:
expr: non-numeric argument
让大家知道我是自定义微型计算机上的 运行 busybox,因此无法访问 bash、bc 和其他解决方案提供的内容。
在 sh
中,我假设您指的是 POSIX shell, your best option is to use Arithmetic Expansion:
$ MIN=1
$ SEC=34
$ TOTSEC=$(( MIN * 60 + SEC ))
$ printf '%d\n' "$TOTSEC"
94
然而,在 csh
中,built-in 的数学运算完全不同:
% 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 合规。最有可能的是 ash,它是 dash
和 FreeBSD 的 /bin/sh
的祖先。您需要在您的环境中进行测试。
我有字符串变量 MIN 和 SEC(分和秒)。
MIN = "1"
SEC = "34"
我想对这些进行计算。
TOTSEC = MIN*60 + SEC
我试过了:
expr $SEC + $MIN * 60
结果:
expr: non-numeric argument
让大家知道我是自定义微型计算机上的 运行 busybox,因此无法访问 bash、bc 和其他解决方案提供的内容。
在 sh
中,我假设您指的是 POSIX shell, your best option is to use Arithmetic Expansion:
$ MIN=1
$ SEC=34
$ TOTSEC=$(( MIN * 60 + SEC ))
$ printf '%d\n' "$TOTSEC"
94
然而,在 csh
中,built-in 的数学运算完全不同:
% 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 合规。最有可能的是 ash,它是 dash
和 FreeBSD 的 /bin/sh
的祖先。您需要在您的环境中进行测试。