我想要一些可能的(比如字符串)值:a b c
。我想要從一個切換到另一個以循環方式:bash中的循環迭代
if [ "$value" == "a" ]; then value=b
elif [ "$value" == "b"]; then value=c
elif [ "$value" == "c"]; then value=a
fi
有了這樣的方法,可以在這個更有效的方式來完成,這樣我就可以支持多種選項,如a b c ... z
?
我想要一些可能的(比如字符串)值:a b c
。我想要從一個切換到另一個以循環方式:bash中的循環迭代
if [ "$value" == "a" ]; then value=b
elif [ "$value" == "b"]; then value=c
elif [ "$value" == "c"]; then value=a
fi
有了這樣的方法,可以在這個更有效的方式來完成,這樣我就可以支持多種選項,如a b c ... 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]}
也可以使用mod運算符和數組長度來簡化你的if else構造 – amdixon
這是可以做到這樣的:
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
echo a b c更簡單 – sureshvv
如果什麼'A-> B'和'B->了'做一個圓形? – luoluo