Ubuntu bc 的奇怪行为

Ubuntu bc 的奇怪行为

Bash 脚本中存在一种奇怪的行为。尝试在两个不同的系统中运行以下行。

脚本:

cpuIdle=$(mpstat 5 1 | grep Average | awk '{  print $12 }')
cpuUsage=$(bc <<< "100.0-$cpuIdle")

以下是机器的详细信息。

系统1:

  • Ubuntu 14.04.04 LTS
  • Linux 4.2.0-36-generic #42~14.04.1-Ubuntu SMP Fri May 13 17:27:22 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
  • awk --version=GNU Awk 4.0.1
  • bash --version=GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

系统2:

  • Ubuntu 16.04.04 LTS
  • Linux 4.4.0-22-generic #40-Ubuntu SMP Thu May 12 22:03:46 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
  • awk --version=GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
  • bash --version=GNU bash, version 4.3.42(1)-release (x86_64-pc-linux-gnu)

脚本在 System-1 上运行顺畅,但在系统-2在跑步的时候bc

(standard_in) 1: syntax error

我可以确认在两个系统中处理器空闲变量设置正确(剧本第一行t)。

我还可以确认,当我设置时,bc 在两个系统中都可以正常工作处理器空闲手动变量(例如 cpuIdle=97.3)。

无法确定这是错误还是我的错误。有什么建议或想法吗?

答案1

它是逗号。

$ cpuIdle=$(mpstat 5 1 | grep Average | awk '{  print $12 }')
$ echo $cpuIdle
99,25

->

$ cpuUsage=$(bc <<< "100.0-95,25")
(standard_in) 1: syntax error

$ cpuUsage=$(bc <<< "100.0-95.25")
$ echo $cpuUsage
4.75

因此这可能是国际化问题(在荷兰我们用逗号表示小数)。我想说:错误,有人忘记将逗号作为可能的小数符号。

切换到美国注释它就会再次起作用。

相关内容