如何在bash脚本中替换“ bc”工具?

all*_*hie 0 linux bash shell awk sed

我的bash脚本中有以下命令:

printf '\n"runtime": %s' "$(bc -l <<<"($a - $b)")"
Run Code Online (Sandbox Code Playgroud)

我需要在大约100台服务器上运行此脚本,但发现其中有几台bc未安装。我不是管理员,无法安装bc在丢失的服务器上。

在那种情况下,我可以使用什么替代方法执行相同的计算?请让我知道新命令的外观

Tur*_*urn 5

如果只处理整数,则可以使用bash的算术扩展

printf '\n"runtime": %s' $((a - b))
Run Code Online (Sandbox Code Playgroud)

请注意,这确实假设您有可用的bash(如您所指示的那样)。如果只有精简版的Bourne shell(/ bin / sh),则无法进行算术扩展。

  • $((..))是POSIX,所以这不是问题。我会更担心不得不支持非整合者 (4认同)
  • @tripleee感觉很安全,因为他们用“ bash”标记了问题,并在标题中特别注明了“ bash脚本”。 (2认同)

tri*_*eee 5

如果您需要一个适用于浮点运算的解决方案,您可以随时使用 Awk。

awk -v a="$a" -v b="$b" 'BEGIN { printf "\n\"runtime\": %s", a-b }' </dev/null
Run Code Online (Sandbox Code Playgroud)

当您想使用 Awk 但没有要循环的行文件时,将代码放在一个BEGIN块中并重定向输入/dev/null是一种常见的解决方法,这正是它的真正设计目的。