【问题标题】:Check if it is an integer or not [duplicate]检查它是否是整数[重复]
【发布时间】:2021-07-14 00:10:17
【问题描述】:

我正在尝试处理“预期的整数表达式”错误。 我需要我的输入只是整数。

我做了一个while循环来检查它,但即使它是一个整数,它也会进入循环。

这是我的代码:

read -p "Number: " number

while [[ ! "$number" =~ '[0-9]' ]];
do

read -p "Reenter the number: " number

done

还有其他方法吗?

【问题讨论】:

  • 您的问题的答案当然是正确的,但您不需要正则表达式。通配符模式也可以:如果number 不完全包含数字,则[[ $number == *[^0-9]* ]] 为真。我希望您知道,这两个版本(答案中的正则表达式解决方案和我的通配符解决方案)都会将负数归类为非数字。

标签: bash validation input integer


【解决方案1】:

通过使用引号,您是在告诉 bash 字符应该按字面意思匹配。而回答[0-9]xyz[0-9]abc 确实是退出循环的方式。

不要引用正则表达式。

此外,您不想检查字符串是否包含数字。您要检查它是否包含其他任何内容。

while [[ ! $number =~ ^[0-9]+$ ]]
  • ^ 代表字符串的开头
  • $ 代表字符串的结尾
  • + 表示至少一位数

您也可以只检查任何非数字:

while [[ $number =~ [^0-9] ]]
  • ^ 在字符类的开头否定它。

【讨论】:

    【解决方案2】:

    试试

    #!/bin/bash
    read -p "Number: " number
    
    while [[ ! "$number" =~ ^[0-9]+$ ]];
    do
        read -p "Reenter the number: " number
    done
    

    【讨论】:

      猜你喜欢
      • 2012-08-27
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 2014-11-29
      • 2011-03-31
      • 2016-02-18
      相关资源
      最近更新 更多