我正在按照bash手册和regex指南来编写脚本,但它不起作用。脚本始终接受所有字符串或数字,并且不遵循格式。
这是一个有效的输入:feat:RQ01_HelloWorld。

#!/usr/bin/env bash --posix
MSG="$1"
FEAT=/feat:[[:space:]]RQ[[:digit:]]+_[[:alpha:]]+/
if [[ $MSG=~$FEAT ]]
    then
    echo "yeah"
else
    echo "is wrong"
    exit 1
fi

最佳答案

有两个问题:
1)与Perl或awk中的正则表达式作为匹配操作的一部分包含在/.../中不同,bash不这样使用它们。/被认为是正则表达式本身的一部分。
2)需要在=~运算符周围使用空格,以便[[看到3个不同的参数,而不是[[认为是真的单个非空字符串。

FEAT="feat:[[:space:]]RQ[[:digit:]]+_[[:alpha:]]+"

if [[ $MSG =~ $FEAT ]]

09-12 21:24