bash中的循环迭代

bash中的循环迭代,bash,Bash,我有几个可能的(比如字符串)值:abc。我希望以循环方式从一个切换到另一个: if [ "$value" == "a" ]; then value=b elif [ "$value" == "b"]; then value=c elif [ "$value" == "c"]; then value=a fi 有了这样的方法,可以更有效地完成这项工作,这样我就可以支持许多选项,比如abc。。。z 您可以使用bash数组 vals=('a' 'b' 'c') value=$1 max=$(( $

我有几个可能的(比如字符串)值:
abc
。我希望以循环方式从一个切换到另一个:

if [ "$value" == "a" ]; then value=b
elif [ "$value" == "b"]; then value=c
elif [ "$value" == "c"]; then value=a
fi

有了这样的方法,可以更有效地完成这项工作,这样我就可以支持许多选项,比如
abc。。。z

您可以使用bash数组

vals=('a' 'b' 'c')
value=$1

max=$(( ${#vals[@]} - 1 ))
count=0
while [ "$value" != "${vals[count]}" ]
do
   count=$(( $count + 1 ))
done
if [ $count -eq $max ]; then
   count=0
else
   count=$(( $count + 1 ))
fi
echo ${vals[count]}

可以这样做:

get_next()
{
    __current_i=${__current_i:- 0} # global variable that saves index of current value
    [ $__current_i -ge $# ] && __current_i=0 # if we exceed the number of values, then reset to zero
    shift $__current_i # move to current value
    ((__current_i++)) # increment index
    echo $1
}

val="a b c d"

get_next $val
get_next $val
get_next $val
get_next $val
get_next $val
为什么这么复杂

这将满足您的要求:

while true; do
  for x in a b c; do
    echo "$x"
  done
done

也可以使用mod运算符和数组长度来简化if-else构造如果
a->b
b->a
做一个循环呢?echo a b c更简单