检查参数是否与具有两个可能值的正则表达式不匹配?

cbd*_*per 3 regex bash sh

这是我试图在我的 bash 脚本之一中执行的操作。

如果SERVER_ENV不是PRODTEST,则脚本必须退出。

check-server-env() {
  local SERVER_ENV="$1"
  if ! [[ "$SERVER_ENV"^^ =~ ^(TEST|PROD)$ ]]; then
    error "$(highlight "$SERVER_ENV")" " does not exist."
    echo "Exiting script..."
    echo ""
    exit 0
  fi
}
Run Code Online (Sandbox Code Playgroud)

我打电话script.sh TEST

SERVER_ENV=$1

check-server-env $SERVER_ENV
Run Code Online (Sandbox Code Playgroud)

这是我打电话的方式。但它不起作用。我究竟做错了什么?

anu*_*ava 6

您可以使用:

check-server-env() {
  local SERVER_ENV="$1"

  if [[ ! "${SERVER_ENV^^}" =~ ^(TEST|PROD)$ ]]; then
    error "$(highlight "$SERVER_ENV")" " does not exist."
    echo "Exiting script..."
    echo ""
    exit 0
  fi
}
Run Code Online (Sandbox Code Playgroud)

但是,您可以放弃正则表达式并使用 extglob 匹配bash

check-server-env() {
  local SERVER_ENV="$1"

  if [[ "${SERVER_ENV^^}" != @(TEST|PROD) ]]; then
    error "$(highlight "$SERVER_ENV")" " does not exist."
    echo "Exiting script..."
    echo ""
    exit 0
  fi
}
Run Code Online (Sandbox Code Playgroud)