bash中整个字符串(不是子字符串)的正则表达式匹配

bash中整个字符串(不是子字符串)的正则表达式匹配,bash,Bash,我想这只输出匹配!如果仅将单个字符a或b作为参数传递。不是AAAA,不是bcfqwefqef,不是qwerty #!/bin/bash P="a|b" if [[ "$1" =~ $P ]]; then echo "match!" else echo "no!" fi 是的,我已经通过了一些SO帖子,已经走到了这一步。在引号中加$P也不起作用。您需要锚定您的正则表达式: #!/bin/bash re="^(a|b)$" if [[ "$1" =~ $re ]]; then

我想这只输出匹配!如果仅将单个字符a或b作为参数传递。不是AAAA,不是bcfqwefqef,不是qwerty

#!/bin/bash
P="a|b"
if [[ "$1" =~ $P  ]]; then
    echo "match!"
else
    echo "no!"
fi

是的,我已经通过了一些SO帖子,已经走到了这一步。在引号中加$P也不起作用。

您需要锚定您的正则表达式:

#!/bin/bash

re="^(a|b)$"
if [[ "$1" =~ $re ]]; then
    echo "match!"
else
    echo "no!"
fi
顺便说一句,这不需要正则表达式。您可以使用glob模式使用相等,如下所示:

if [[ "$1" == [ab] ]]; then
    echo "match!"
else
    echo "no!"
fi

您需要锚定您的正则表达式:

#!/bin/bash

re="^(a|b)$"
if [[ "$1" =~ $re ]]; then
    echo "match!"
else
    echo "no!"
fi
顺便说一句,这不需要正则表达式。您可以使用glob模式使用相等,如下所示:

if [[ "$1" == [ab] ]]; then
    echo "match!"
else
    echo "no!"
fi

我需要的是^…$wrapping,现实世界中的用例是比a长的字符串,bYou可能仍然能够使用模式匹配:$1==长字符串a |长字符串b |长字符串c,例如。如果选择非常具体,模式匹配通常更简单。@chepner需要@pattern1 | pattern2,不是吗?是的,我在考虑大小写语法。我需要的是^…$wrapping,现实世界中的用例是比a长的字符串,bYou可能仍然能够使用模式匹配:$1==长字符串a |长字符串b |长字符串c,例如。如果选择非常具体,模式匹配通常更简单。@chepner需要@pattern1 | pattern2,不是吗?是的,我在考虑大小写语法。