我有四个元素我正在改变bash的颜色。要改变颜色,请使用
tput setaf [1-7]
我的第一个元素从1开始,到7,并且使用嵌套循环很好地包裹,但我希望每个元素都遵循左边的元素。 所以,如果我开始
RED GREY BLUE PINK
颜色将变为
GREEN RED GRAY BLUE
然后
黄绿色红色灰色
等等,直到他们回到原来的方向并重复。
我发现的唯一一个用于包围边界数字的例子使用
将边界数字包回到0x = (x+1) % N
其中x是当前位置(或我的情况下的颜色),N是允许数字到达的最大值,但我想排除0(黑色)。我改成了
(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
答案 0 :(得分:1)
由于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。