#!/bin/bash

ARGS=()  # positional arguments

while [ $# -gt 0 ]; do
  case "$1" in
    # --key=value or -k=value
    --*=* | -*=*)
      key=${1%%=*}
      key=${key#--}
      key=${key#-}
      key=$(printf '%s' "$key" | tr 'a-z-' 'A-Z_')

      val=${1#*=}
      export "$key=$val"

      unset key val   # remove temporary variables
      shift
      ;;
    # --key value or -k value, or boolean flag
    --* | -*)
      key=${1#--}
      key=${key#-}
      key=$(printf '%s' "$key" | tr 'a-z-' 'A-Z_')

      if [ -n "$2" ] && [[ ! "$2" =~ ^- ]]; then
        val="$2"
        export "$key=$val"
        shift 2
      else
        export "$key=1"
        shift
      fi

      unset key val   # remove temporary variables
      ;;
    # positional arguments
    *)
      ARGS+=("$1")
      shift
      ;;
  esac
done
