#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
, существование которой не гарантируется на вашей базовой платформе.