【问题标题】:Do math on CSH or SH only with string variables仅使用字符串变量对 CSH 或 SH 进行数学运算
【发布时间】:2018-09-01 15:11:31
【问题描述】:

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

MIN = "1"
SEC = "34"

我想对这些进行计算。

TOTSEC = MIN*60 + SEC

我试过了:

表达式 $SEC + $MIN * 60

结果:

expr:非数字参数

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

【问题讨论】:

  • 是否使用\* 而不是* 来避免被视为一个全局对象?
  • 使用\*后输出同样的错误
  • csh 还是 sh?它们完全不同。
  • 是的,请确认csh或sh,因为您需要在csh中使用set MIN = 3语法。也许您想删除对 csh 的引用,除非那是您想要的。祝你好运。
  • sh(bash 等)中。正确的语法是MIN=1。 (= 周围没有空格)。 AND 在所有 shell 中,所有变量值都被视为字符串。如果您的值有空格,即word="a b c",您只需要在这样的分配中引用 dbl-quote。祝你好运。

标签: string variables math sh csh


【解决方案1】:

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 的祖先。您需要在您的环境中进行测试。

【讨论】:

  • 您好,请注意 MIN=1 不正确。它实际上是这样的字符串。 MIN="1"
  • @GeneCode bash 中没有数字类型。 MIN=1MIN="1"MIN='1' 完全相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 2017-03-15
  • 1970-01-01
相关资源
最近更新 更多