使用正则表达式进行Bash参数验证

Ram*_*iva 2 regex bash

我不知道如何在bash中正确使用正则表达式,我试图以这种方式做错误,正则表达式验证有什么问题?

#!/bin/bash

if [ ! $# -eq 1 ]; then
        echo "Error: wrong parameters"
else
        if [ $1 =~ "[a-z]" ]; then
                echo "$1: word"
        elif [ $1 =~ "[0-9]" ]; then
                echo "$1: number"
        else
                echo "$1: invalid parameter"
        fi
fi
Run Code Online (Sandbox Code Playgroud)

dar*_*ten 13

我已经重写了您的脚本并获得了以下预期结果:

  #!/bin/bash                                                                                                                                                                                      
  if [ ! $# -eq 1 ]; then
    echo "Error: wrong parameters"
  else
    if [[ $1 =~ ^[a-z]+$ ]]; then
      echo "$1: word"
    elif [[ $1 =~ ^[0-9]+$ ]]; then
      echo "$1: number"
    else
      echo "$1: invalid parameter"
    fi
  fi
Run Code Online (Sandbox Code Playgroud)

您不需要引用您的正则表达式.

  • 更重要的是,你*不应该*引用正则表达式:从联机帮助页,"可以引用模式的任何部分以强制它匹配为字符串" (3认同)

l0b*_*0b0 6

不要引用正则表达式,并使用双括号:

[[ "$1" =~ [a-z] ]]
Run Code Online (Sandbox Code Playgroud)

在这个特定情况下引用变量并不是绝对必要的,但它并没有受到伤害,并且总是引用包含变量的字符串是一种好习惯,因为与字拆分相关的非常非常多的陷阱.

  • 双括号表示实现正则表达式匹配运算符`=〜`的特定于bash的[条件构造](http://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs). (2认同)