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

atx*_*dba 1 bash

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

#!/bin/bash
P="a|b"
if [[ "$1" =~ $P  ]]; then
    echo "match!"
else
    echo "no!"
fi
Run Code Online (Sandbox Code Playgroud)

是的,我已经通过一些SO帖子来实现这一点.将$ P加入引号也不起作用.

anu*_*ava 5

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

#!/bin/bash

re="^(a|b)$"
if [[ "$1" =~ $re ]]; then
    echo "match!"
else
    echo "no!"
fi
Run Code Online (Sandbox Code Playgroud)

顺便说一下这不需要正则表达式.您可以使用glob模式使用相等:

if [[ "$1" == [ab] ]]; then
    echo "match!"
else
    echo "no!"
fi
Run Code Online (Sandbox Code Playgroud)

  • @chepner需要`@(pattern1 | pattern2)`,不是吗? (2认同)