如何在Bash中匹配符号,主要是“ +”,“-”,“ /”,“ *”

时间:2019-11-15 12:32:34

标签: regex bash

如何在Bash中匹配此标志:

+

-

/

*

这是我尝试使用的代码,但是没有用。

is_sign(){
yoursign=$1
re="^[+,-,\/,\*]$"
if ! [[ $yoursign =~ $re ]] ; then
   echo "Not a sign"
  return 2
else
  return 0
fi
}

is_sign $1    

2 个答案:

答案 0 :(得分:2)

您使用的模式包含以下问题:

  • 您逃脱了特殊字符的想法,认为这会使它们成为文字字符,但是实际上,在POSIX括号表达式中,反斜杠被视为常规的文字反斜杠,并且您所做的就是还允许对文字\进行匹配使用正则表达式
  • 如果要匹配文字连字符,
  • -必须位于POSIX括号表达式的开头或结尾
  • 通过在正则表达式中添加逗号,它现在还可以匹配逗号。

使用

re='^[+/*-]$'

Demo

is_sign() {
yoursign=$1
re='^[+/*-]$'
if ! [[ $yoursign =~ $re ]] ; then
  echo "Not a sign"
  #return 2
else
  echo "Yeah, is a sign"
  #return 0
fi
}

echo "$(is_sign "+")" # => Yeah, is a sign
echo "$(is_sign "m")" # => Not a sign

答案 1 :(得分:0)

您有两种解决方案:

正则表达式:

re='^[+/*-]$'
if ! [[ $yoursign =~ $re ]] ; then

全球:

glob='[+/*-]'
if ! [[ $yoursign == $glob ]] ; then

请注意,负号-在字符类(在glob和正则表达式中)中是特殊的,因此您需要将其放在开头或结尾