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

String 仅使用字符串变量对CSH或SH进行数学运算,string,variables,math,sh,csh,ash,String,Variables,Math,Sh,Csh,Ash,我有字符串变量MIN和SEC(分和秒) 我想对这些进行计算 总秒=分钟*60+秒 我试过: expr$SEC+$MIN*60 结果: expr:非数值参数 请注意,我正在自定义微型计算机上运行busybox,因此无法访问bash、bc和其他解决方案提供的功能。在sh中,我假设您指的是a,您最好的选择是使用: 然而,在csh中,内置的数学原理却截然不同: % set MIN = 1 % set SEC = 34 % @ TOTSEC = ( $MIN * 60 + $SEC ) % printf

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

我想对这些进行计算

总秒=分钟*60+秒

我试过:

expr$SEC+$MIN*60

结果:

expr:非数值参数


请注意,我正在自定义微型计算机上运行busybox,因此无法访问bash、bc和其他解决方案提供的功能。

sh
中,我假设您指的是a,您最好的选择是使用:

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

% set MIN = 1
% set SEC = 34
% @ TOTSEC = ( $MIN * 60 + $SEC )
% printf '%d\n' "$TOTSEC"
94
根据手册页,
@
命令允许执行数值计算并将结果分配给变量

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

sh
中:

$ TOTSEC=$(expr "$MIN" \* 60 + "$SEC")
% set TOTSEC = `expr "$MIN" \* 60 + "$SEC"`
csh
中:

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

注意:您的
sh
可能不符合POSIX。最有可能的是,它是dash和FreeBSD的前身。您需要在您的环境中进行测试。

sh
中,我假设您的意思是a,您最好的选择是使用:

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

% set MIN = 1
% set SEC = 34
% @ TOTSEC = ( $MIN * 60 + $SEC )
% printf '%d\n' "$TOTSEC"
94
根据手册页,
@
命令允许执行数值计算并将结果分配给变量

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

sh
中:

$ TOTSEC=$(expr "$MIN" \* 60 + "$SEC")
% set TOTSEC = `expr "$MIN" \* 60 + "$SEC"`
csh
中:

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

注意:您的
sh
可能不符合POSIX。最有可能的是,它是dash和FreeBSD的前身。您需要在您的环境中进行测试。

是否使用
\*
而不是
*
来避免被视为glob工作?使用\*csh或sh后会输出相同的错误?它们完全不同。是的,请确认csh或sh,因为您需要在
csh
中使用
set MIN=3
语法。也许你想删除对csh的引用,除非这是你想要的。祝你好运。在
sh
(bash等)。正确的语法是
MIN=1
。(在
=
周围没有空格)。在所有shell中,所有变量值都被视为字符串。如果您的值有空格,则只需在类似这样的赋值中使用dbl引号,即
word=“a b c”
。祝你好运。
\*
而不是
*
是否可以避免被当作一个glob来处理?在我使用\*csh或sh之后,同样的错误也会输出?它们完全不同。是的,请确认csh或sh,因为您需要在
csh
中使用
set MIN=3
语法。也许你想删除对csh的引用,除非这是你想要的。祝你好运。在
sh
(bash等)。正确的语法是
MIN=1
。(在
=
周围没有空格)。在所有shell中,所有变量值都被视为字符串。如果您的值有空格,则只需在类似这样的赋值中使用dbl引号,即
word=“a b c”
。祝你好运。嗨,请注意MIN=1不正确。它实际上是这样的字符串。MIN=“1”@GeneCode bash中没有数字类型
MIN=1
MIN=“1”
MIN='1'
完全相同,请注意MIN=1不正确。它实际上是这样的字符串。MIN=“1”@GeneCode bash中没有数字类型
MIN=1
MIN=“1”或
MIN=“1”完全相同