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

时间:2017-05-26 20:15:40

标签: bash

我希望这只输出“匹配!”如果只传递单个字符“a”或“b”作为参数。不是aaaaa,不是bcfqwefqef,不是qwerty。

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

是的,我已经通过了一些SO帖子来实现这一目标。将$ P加到引号中也不起作用。

1 个答案:

答案 0 :(得分:5)

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

#!/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