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!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie glücklich sind, mit ein paar
$
Zeichen hier und da, wie über Sie erklären einige Konstanten: