【问题标题】:bash condition with regular expression带有正则表达式的bash条件
【发布时间】:2013-10-25 22:06:42
【问题描述】:

我要学习 bash 编程。我刚刚编写了一个简单的脚本,以便从输入流中读取数字并使用正则表达式检查它们是否为有效的数字格式。 事实上,脚本应该接受输入,直到输入为非数字。 但它不能正常工作。

代码:

i=0
echo "plz enter number in valid format: " 

while true
do
        read input

        if  [[ $input =~ *[^0-9]* ]]; then
                echo "YOU DIDN'T ENTER A VALID NUMBER"
                break
        else
                arr[$i]=$input
                echo $input >> inputnums

        fi
done

当我输入一个数字或字符时,条件为真。我的意思是我在输出中有回显“消息”。

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    您正在将 shell globing 与正则表达式混合,将您的 if 条件更改为:

    if  [[ $input =~ [^0-9] ]]; then
    

    正则表达式应该使用 .* 而不是 shell shell glob 使用的 *

    【讨论】:

    • @Kent:谢谢,我想我也没那么快,因为这个问题在 5 分钟内没有得到回答。
    • @anubhava 谢谢。它有效,但我无法得到它。我知道 * 代表零个或多个字符,但为什么我不应该在这种情况下使用它?我的意思是正则表达式和shell glob有什么区别?你能解释更多吗?
    • 正如我在回答中所写的那样,在正则表达式中,您需要使用 .* 来表示 0 个或更多字符
    【解决方案2】:

    从正则表达式中删除*

    #!/bin/bash
    
    i=0
    echo "plz enter number in valid format: " 
    
    while true
    do
        read input
    
        if  [[ $input =~ ^[^0-9]+$ ]]; then
            echo "YOU DIDN'T ENTER A VALID NUMBER"
            break
        else
            arr[$i]=$input
            echo $input 
        fi
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 2012-09-10
      相关资源
      最近更新 更多