如何使用模数将数字包装在 1 和 7 之间



我有四个元素,我正在改变bash的颜色。要更改颜色,我正在使用

tput setaf [1-7]

我的第一个元素从 1 开始,到 7,并使用嵌套循环很好地环绕,但我希望每个元素都跟随其左侧的元素。 所以如果我从

红灰色蓝色粉红

颜色将更改为

绿色 红色 灰色 蓝色

然后

黄绿红灰

依此类推,直到他们恢复原始方向并重复。

我发现的唯一将数字绕在边界周围

的例子是使用
x = (x+1) % N

其中 x 是当前位置(或在我的情况下是颜色),N 是允许数字达到的最大值,但我想排除 0(BLACK)。我把它改成了

(x-1) % N + 1

因此,每个元素都遵循其左侧的元素并添加一个以避免获得零,但是由于该添加,每个元素最终都会遇到一个错误。

这是我到目前为止的代码:

K="0"
# iterate through all colors twice
while [ $K -lt 2 ]; do
for j in {1..7}; do
# just positioning the elements/letters
tput cup $(( $ROWS / 2 + $ROWS / 8 )) $(( $COLS / 2 ))
tput setaf $j
echo -n "T"
tput setaf $(( ($j - 1) % 7 + 1))
echo -n "E"
tput setaf $(( ( $j - 2 ) % 7 ))
echo -n "S"
tput setaf $(( ($j - 3) % 7 ))
echo -n "T"
sleep 0.5
done
(( K++ ))
done
tput sgr0

由于x % 7产生一个 0..6 范围内的数字,因此您需要将 1 相加才能得到 1..7 的结果。

tput setaf $(( ($j + 6) % 7 + 1))
echo -n "E"
tput setaf $(( ($j + 5) % 7 + 1))
echo -n "S"
tput setaf $(( ($j + 4) % 7 + 1))
echo -n "T"

注意间距的均匀性;它有助于向我保证,至少代码有可能是正常的。 我还把减法改成了加法;当你取负数的模时,你会得到负结果,这根本无济于事。 加 6 模 7 相当于减去 1 模 7。

最新更新