String 仅使用字符串变量对CSH或SH进行数学运算
我有字符串变量MIN和SEC(分和秒) 我想对这些进行计算 总秒=分钟*60+秒 我试过: expr$SEC+$MIN*60 结果: expr:非数值参数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
请注意,我正在自定义微型计算机上运行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”完全相同