массив строк не назначен должным образом каждому цвету

#bash

#bash

Вопрос:

Недавно мне пришла в голову хорошая идея создать радужный текст, но она продолжает давать сбои.Я попытался создать вложенный цикл, чтобы каждый цвет и строка в их массиве могли быть назначены вместе, чтобы получился классный текст.

 output=(Z y r o V P N)
rainbow=(9 202 11 46 43 90 91)
for i in ${rainbow[*]}
do
    for x in ${output[*]}
    do
        echo -e "e[38;5;${i}m${x}e[0m"
    done
done
  

но это то, что происходит
весь текст окрашен

надеюсь, это можно решить

Комментарии:

1. Вы имели в виду раскрасить каждую букву в ‘output’ как-то иначе?

Ответ №1:

Вам нужно выполнить итерацию по обоим циклам вместе:

    #!/bin/bash
   output=(Z y r o V P N)
   rainbow=(9 202 11 46 43 90 91)
   for i in $(seq 0 ${#output[*]}); do
       echo -en "e[38;5;${rainbow[i]}m${output[i]}e[0m"
   done
   echo
  

-n предотвращает создание новой строки, и окончательное эхо добавляет ее.

Комментарии:

1. кстати, в чем смысл seq?

2. Он генерирует список всех чисел от 0 до выходной длины. Также, пожалуйста, примите, если это то, что вы имели в виду / нужно.

3. В bash вместо этого более эффективно выполнять итерацию по ${!output[@]} . Нет необходимости использовать внешнюю команду seq , существование которой не гарантируется на вашей базовой платформе.