Bash正则表达式被视为字符串而不是正则表达式

Mag*_*nus 0 regex bash

有人可以解释为什么下面的bash代码会回显“选择是一个数字!”。当我在读取提示下键入“ 1”时:

  read choice
  re='^[0-9]+$'

  if [[ $choice =~ $re ]]; then
    echo "choice was a number!"
  else
    echo "choice was NOT a number!"
  fi
Run Code Online (Sandbox Code Playgroud)

...但是没有中间$re变量的相同代码将回显“选择不是数字!”:

  read choice

  if [[ $choice =~ '^[0-9]+$' ]]; then
    echo "choice was a number!"
  else
    echo "choice was NOT a number!"
  fi
Run Code Online (Sandbox Code Playgroud)

Cyr*_*rus 5

如果将的右侧=~用引号引起来,则右侧将被视为字符串而不是正则表达式。