Вот немного фона, если вы заинтересованы.
Как указывали другие, терминалы реагируют на так называемые escape-последовательности. Это последовательность символов, которые вы можете отправить на терминал (запись, отображение), и вместо отображения этих символов аппаратное обеспечение терминала интерпретирует их как команды для выполнения различных действий. Это может быть что угодно: от перемещения курсора, до мигания, изменения цветов переднего плана и фона. Это то, что делает ANY терминальная программа (будь то vi, emacs, ls или bash), когда требуется вызвать определенные возможности терминала.
Проблема в том, что существует множество различных типов терминалов, которые имеют разные возможности и реагируют на различные escape-последовательности. Раньше у людей появился механизм борьбы с этим. Они придумали termcap, а затем terminfo, что является способом абстрагирования возможностей терминала. Таким образом, вы выполняете такие действия, как «перемещать курсор» или «устанавливать цвет переднего плана», а базовая библиотека извлекает правильную последовательность эвакуации из БД, поддерживаемой для разных терминалов (на основе значения переменной среды TERM и т. Д.).
Таким образом, у вас есть знаменитая библиотека проклятий. Он позволяет вам делать все это. Для таких вещей, как bash, они инкапсулировали эту функциональность в команду, которую вы можете вызвать, называемую tput. man page give you the details как его вызвать. Поэтому было бы предпочтительнее не использовать escape-последовательности напрямую. Но, скорее, вы должны пройти через tput, чтобы оставаться независимым от терминала, с которым вы работаете.
Проверьте эту ссылку: http://stackoverflow.com/questions/2437976/get-color-output-in-bash – user000001