【问题标题】:Bash: Check a String is a Number (whatever the format) [duplicate]Bash:检查字符串是否为数字(无论格式如何)[重复]
【发布时间】:2020-07-07 22:33:46
【问题描述】:

我想分享一种在 bash 中检查字符串是否为数字的方法。这个问题已经被问过here,但答案只适用于经典格式的整数或浮点数,当数字可以是科学格式时,它使用复杂的正则表达式。其次,我没有足够的声望来回答现有的问题(这里完全是新鲜的帐户......)。

所以问题是:

如何(轻松)检查字符串是否为 bash 中的数字?

字符串如下:

"1234"
"-1.234"
"1.23e4"
"+1.23E04"
etc.

在下面的...答案中回答。

【问题讨论】:

  • 请在打开新问题之前检查问题是否已经存在。见How do I test if a variable is a number in Bash?
  • Zrin,我解释了为什么我在问题的文本中打开了一个新问题(没有足够的声誉来回答现有线程)。
  • Ed Morton,是的,我后来看到了这个,确实是同样的逻辑。太糟糕了,它在答案流中丢失了。接受的不是最好的。然后,我认为“返回”(打印)“真”或“假”比 1 或 0 更好,因为它是一个布尔值。使用目前的解决方案,这是可行的: if IsNumber $var;然后(...)fi。

标签: bash awk scientific-notation


【解决方案1】:

一个简单的方法是像这样使用 awk:

function IsNumber {

    echo "$1" | awk '{if ($1+0 == $1) print "true"; else print "false"}'

}

例子:

$ IsNumber 1234
true
$ IsNumber 1.234
true
$ IsNumber 1.23E04
true
$ IsNumber abc
false

【讨论】:

  • 告诉 awk 将 strnum(例如 $1)视为数字的惯用方法是加零,因此用于测试 $1 是否为数字的惯用 awk 代码是 $1+0 == $1 而不是 @987654324 @.
  • 嗨,埃德莫顿。这是风格问题还是采用 +0 而不是 *1 是否有优势? (例如,它更快吗?)
  • idk,我已经使用它 30 多年了,还没有考虑过...我想可能加法比乘法快,或者 +0 浮点舍入错误的可能性较小比*1?使用它 AFAIK 的主要论据是,每个人看到它时都知道它是什么,因为它是多年来在脚本中使用的东西。
  • 感谢 Ed Morton 提供的信息。
猜你喜欢
  • 2014-05-01
  • 2011-11-27
  • 2021-05-22
  • 2023-01-29
  • 2016-02-18
  • 2015-12-28
  • 2012-12-21
  • 2019-09-14
  • 2022-10-23
相关资源
最近更新 更多