【问题标题】:Bash how to check if a string is a number(can be negative) [duplicate]Bash如何检查字符串是否为数字(可以是负数)[重复]
【发布时间】:2014-05-01 20:08:33
【问题描述】:

我想检查某个字符串是否为数字,我试过这样:

if ${string} == *[!0-9]*
else echo its a number

但是当我有一个负数时,它说它不是一个数字,我希望它也适用于负数。

【问题讨论】:

  • 不,它不适用于负数
  • 在那个问题中,您可以找到一些考虑到负数的答案。
  • @Sefi,那里接受的答案在其 cmets 中有一个负数的解决方案;我已将其编辑为正确的答案。
  • @CharlesDuffy 非常感谢,但是当我有一个像“---7”这样的数字时,它说它不是一个数字,而不是读为 -7
  • @Sefi, ---7 不是数字;逻辑是正确的。但是,如果您想要零个或多个 - 符号,则可以使用 -* 而不是 -?。顺便说一句,另一个答案中的 cmets 也讨论了这个问题。 :)

标签: bash


【解决方案1】:

试试这个脚本

#!/bin/bash

string=$1

if [[ "$string" =~ ^(-)?[0-9]+$ ]]; then
  echo 'Number'
else
  echo 'Not number'
fi

这仅适用于整数。

如果你想匹配和十进制数然后使用这个测试

"$string" =~ ^-?[0-9]+(\.[0-9]+)?$

【讨论】:

  • +1 对于我认为你快速粘贴在这里的内容
  • 非常感谢,但是当我有这样的数字“---7”时,它说它不是数字。
  • @Sefi 你应该在数字前只有一个减号。如果你想要多个减号然后替换 (-)?带 (-)*
  • 谢谢!完美运行!
  • 在十进制形式中,您应该将* 替换为?,否则您还将匹配输入,例如1.2.3。 (顺便说一句:我假设您使用 (-)? 而不仅仅是 -? 以提高可读性。)
猜你喜欢
  • 2011-11-27
  • 2020-07-07
  • 2023-01-29
  • 2021-05-22
  • 2021-07-10
  • 2016-02-18
  • 2012-12-21
  • 1970-01-01
相关资源
最近更新 更多