emulieren enum-Semantik in der bash-shell

War ich versucht, zu emulieren, die C-enum-Semantik bei arrays, aber ohne viel Erfolg, im Grunde möchte ich in der Lage sein zu Durchlaufen und eine Reihe von Elementen und auch eine variable deklarieren, die nur durch die Verwendung einer Kennung wie diese:

$ bash -version
GNU bash, versión 4.1.10(4)-release (i686-pc-cygwin)

schlechten Versuch:

    #!/bin/bash
    STATES=(INITIAL DEFAULT_CS_SETUP  CREATED_CS CHECKED_OUT_DIR MKELEMENT_FILE\
CREATED_BRANCH CHECKED_IN_DIR COMPLETE)
    tam=${#STATES[@]}
    dereference()
    {
       tam=${#STATES[@]}
       for ((j=0; j < $tam; j++)); do
          if [[ "$state" == ${STATES[j]} ]];then
           echo $j
           break
         fi
       done
    }

    echo get the INITIAL state
    state=INITIAL
    echo ${STATES[`dereference`]}

    echo get the next state from CREATED_CS
    state=CREATED_CS
    echo ${STATES[`dereference`+1]}

    echo list elements from CREATED_CS to the end
    state=CREATED_CS
    for ((i=`dereference`; i < $tam; i++)); do
      echo ${STATES[$i]}
    done

    echo list elements from CREATED_CS to CREATED_BRANCH is really awkward
    state=CREATED_BRANCH
    tmp_ind=`dereference`
    state=CREATED_CS
    for ((i=`dereference`; i <= $tmp_ind; i++)); do
      echo ${STATES[$i]}
    done

Ausgabe:

get the INITIAL state
INITIAL
get the next state from CREATED_CS
CHECKED_OUT_DIR
list elements from CREATED_CS to the end
CREATED_CS
CHECKED_OUT_DIR
MKELEMENT_FILE
CREATED_BRANCH
CHECKED_IN_DIR
COMPLETE
list elements from CREATED_CS to CREATED_BRANCH is really awkward
CREATED_CS
CHECKED_OUT_DIR
MKELEMENT_FILE
CREATED_BRANCH

Unten Frage ist nicht, über die Richtigkeit des obigen code, ich habe stattdessen ein Skript mit Zuständen und übergängen, und ich will nicht daran zu erinnern, jeden Staat und index, ich will die Etiketten statt.

Dank!

InformationsquelleAutor user311174 | 2013-06-19
Schreibe einen Kommentar