Вам необходимо сохранить в $C_CYAN фактический код ANSI, а не его экранированную версию:
C_CYAN=$'\033[36m'
~
Или, если вы не можете изменить $C_CYAN:
eval echo -e "\\\\\\\\\\${C_CYAN}hello"
Но я бы решительно выступал за первое.
Вы можете использовать printf
:
printf '\%bhello\n' "$C_CYAN"
но, как говорит @chepner в своем комментарии, лучше использовать tput
, чем жестко запрограммировать escape-последовательности:
C_CYAN=$(tput setf 3)
Отлично! Это полностью очищает мое все!
Используйте tput
, как предлагали другие, но также сбросьте цвет после его использования, например:
$ c_cyan=$(tput setf 3)
$ c_reset=$(tput sgr0)
$ printf "\\${c_cyan}hello${c_reset}\n"
\hello
$ printf "I said ${c_cyan}hello${c_reset} to them\n"
I said hello to them
Кроме того, не используйте все имена в верхнем регистре для неэкспортируемых переменных, см. Правильная заглавная буква переменных Bash и сценария оболочки.
Используйте
C_CYAN=$(tput setf 3)
вместо жестко заданных escape-кодов для конкретного терминала.