Вопрос или проблема
Что у меня получилось:
array[0]="Programm is Running"
array[1]="programm is down"
Что я хочу:
array[0]="Programm is \e[0;32mRunning\e[0m"
array[1]="programm is \e[0;31mDown\e[0m"
Это сделает вещи немного более красочными (с помощью команды echo -e
), по крайней мере, я на это надеюсь.
Я попытался заменить это на:
array[$i]=${array[$i]//"running"/"\e[0;32mrunning\e[0m"}
array[$i]=${array[$i]//"down"/"\e[0;31mdown\e[0m"}
Это не сработало. Сообщение об ошибке:
0403-011 Указанная замена недопустима для этой команды.
Почему это происходит? Что я должен сделать иначе?
кажется, у вас неверно указан регистр Running vs running, следующее решение работает у меня
array[0]="Programm is running"
array[1]="Programm is down"
for i in 0 1; do
array[$i]=${array[$i]//"running"https://superuser.com/"\e[0;32mrunning\e[0m"}
array[$i]=${array[$i]//"down"https://superuser.com/"\e[0;31mdown\e[0m"}
done
echo ${array[0]}
echo ${array[1]}
выдает
Programm is \e[0;32mrunning\e[0m
Programm is \e[0;31mdown\e[0m
с echo -e вместо просто echo, это выдает корректный цветной текст, однако, было бы проще просто исправить вручную, чем перерабатывать это каждый раз, когда она запускается.
Ответ или решение
Для замены подстроки в массиве с использованием bash необходимо учесть несколько важных моментов, чтобы избежать ошибок и добиться желаемого результата. Ваш текущий метод замены подстрок вызывает ошибку, поскольку не учитывает некоторые нюансы Bash синтаксиса и работы с регистром. Давайте подробно разберем, как можно исправить вашу ситуацию.
Проблема
Вы столкнулись с ошибкой при выполнении замены подстрок в элементах массива Bash. Существует несколько потенциальных причин, почему это могло произойти:
-
Чувствительность к регистру: Ваша текущая замена не учитывает различия в регистре слов ("Running" vs "running"). Это важно для успешной подстановки.
-
Невалидная подстановка: Синтаксис подстановки может быть нарушен, что приводит к ошибке.
-
Кодировка символов: Специальные символы для цветного вывода должны быть корректно интерпретированы командой
echo -e
.
Решение
Давайте применим более правильный подход для реализации вашей задачи:
#!/bin/bash
# Инициализация массива
array[0]="Programm is running"
array[1]="Programm is down"
# Цикл для обработки каждого элемента массива
for i in "${!array[@]}"; do
# Замена подстрок с учетом регистра
array[$i]=${array[$i]//"running"/"\e[0;32mRunning\e[0m"}
array[$i]=${array[$i]//"down"/"\e[0;31mDown\e[0m"}
done
# Вывод массива с использованием `echo -e` для отображения цветного текста
for element in "${array[@]}"; do
echo -e "$element"
done
Объяснения
-
Итерирование по массиву: Мы используем цикл по индексам массива (
"${!array[@]}"
), чтобы извлечь текущий индекс и правильно обновить его значение. -
Замена подстрок: Обратите внимание, что переменные записаны в правильном регистре ("Running" и "Down") для успешной подстановки.
-
Форматированная печать: Использование
echo -e
позволяет интерпретировать последовательности символов для цветной печати.
Заключение
Такой подход позволяет корректно выполнять замену подстрок в элементах массива и гарантирует, что форматировка работает как ожидалось. Применяя этот метод, вы сможете добиться цветного отображения необходимого текста в терминале.