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

Check if parameter does NOT match regex with two possible values?

这是我在我的 bash 脚本之一中尝试做的事情。

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

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

我叫script.sh TEST

SERVER_ENV=

check-server-env $SERVER_ENV

这是我的通话方式。而且它不起作用。我做错了什么?

您可以使用:

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

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

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

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

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

为什么要使用正则表达式?

if [ "${SERVER_ENV^^}" != "PROD" ] && [ "${SERVER_ENV^^}" != "TEST" ]; then
    error "$(highlight "$SERVER_ENV")" " does not exist."
    echo "Exiting script..."
    echo ""
    exit 0
fi