1
我试图模仿C语言的枚举语义与数组,但没有太多的成功,基本上我想能够迭代通过一组项目,还声明一个变量只是通过使用一个标识符像这样的:在bash shell中模拟枚举语义
$ bash -version
GNU bash, versión 4.1.10(4)-release (i686-pc-cygwin)
不良企图:
#!/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
输出:
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
ŧ他最基本的问题不是关于上面的代码的正确性,而是我有一个脚本与状态和转换,我不想记住每个状态和索引,我想用标签来代替。
谢谢!
+1唯一要注意的是,通过保持信息的两倍,我要记得还重现常量如果我添加或减去数组中的元素 – user311174
如果将它像我一样放在代码中,则不必担心这一点。只需更新数组,常量将自动创建。 – Jester