| #!/bin/bash |
| ## ----------------------------------------------------------------------- |
| ## ----------------------------------------------------------------------- |
| |
| ## ----------------------------------------------------------------------- |
| ## Intent: Set state flags for parsing based on detection of switch modifiers |
| ## ----------------------------------------------------------------------- |
| function getopt_detect_modifiers() |
| { |
| local arg="$1"; shift |
| |
| local -a patterns=() |
| patterns+=('and' 'or') |
| patterns+=('excl' 'incl') |
| patterns+=('in' 'not') |
| patterns+=('is-empty') |
| |
| unset getopt_argv_AND |
| unset getopt_argv_EXCL |
| unset getopt_argv_INCL |
| unset getopt_argv_IN |
| unset getopt_argv_IS_EMPTY |
| unset getopt_argv_NOT |
| unset getopt_argv_OR |
| |
| local pattern |
| for pattern in "${patterns[@]}"; |
| do |
| # echo "** ${FUNCNAME} pattern=[$pattern], arg=[$arg]" |
| case "$pattern" in |
| 'and') |
| case "$arg" in |
| *'-'[aA][nN][dD]*) declare -g -i getopt_argv_AND=1 ;; |
| esac |
| ;; |
| |
| 'or') |
| case "$arg" in |
| *'-'[oO][rR]*) |
| declare -g -i getopt_argv_OR=1 |
| ;; |
| esac |
| ;; |
| |
| 'excl') |
| case "$arg" in |
| *'-'[eE][xX][cC][lL]*) declare -g -i getopt_argv_EXCL=1 ;; |
| esac |
| ;; |
| |
| 'incl') |
| case "$arg" in |
| *'-'[iI][nN][cC][lL]*) declare -g -i getopt_argv_INCL=1 ;; |
| esac |
| ;; |
| |
| 'in') |
| if [[ ! -v getopt_argv_INCL ]]; then |
| case "$arg" in |
| *'-'[iI][nN]*) declare -g -i getopt_argv_IN=1 ;; |
| esac |
| fi |
| ;; |
| |
| 'is-empty') |
| case "$arg" in |
| *'-'[iI][sS]-[eE][mM][pP][tT][yY]) declare -g -i getopt_argv_IS_EMPTY=1 ;; |
| esac |
| ;; |
| |
| 'not') |
| case "$arg" in |
| *'-'[nN][oO][tT]*) declare -g -i getopt_argv_NOT=1 ;; |
| esac |
| ;; |
| |
| esac |
| |
| done |
| |
| if false; then |
| [[ -v getopt_argv_AND ]] && { declare -p getopt_argv_AND; } |
| [[ -v getopt_argv_EXCL ]] && { declare -p getopt_argv_EXCL; } |
| [[ -v getopt_argv_INCL ]] && { declare -p getopt_argv_INCL; } |
| [[ -v getopt_argv_IN ]] && { declare -p getopt_argv_IN; } |
| [[ -v getopt_argv_IS_EMPTY ]] && { declare -p getopt_argv_IS_EMPTY; } |
| [[ -v getopt_argv_NOT ]] && { declare -p getopt_argv_NOT; } |
| [[ -v getopt_argv_OR ]] && { declare -p getopt_argv_OR; } |
| fi |
| |
| ## Persistent flags |
| [[ -v getopt_argv_AND ]] && { declare -g -i getopt_argv_any_AND=1; } |
| [[ -v getopt_argv_OR ]] && { declare -g -i getopt_argv_any_OR=1; } |
| |
| if false; then |
| [[ -v getopt_argv_any_AND ]] && { declare -g -i getopt_argv_any_AND; } |
| [[ -v getopt_argv_any_OR ]] && { declare -g -i getopt_argv_any_OR; } |
| fi |
| |
| |
| : # return $?==0 |
| return |
| } |
| |
| # [EOF] |