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更简单