Краткий ответ - сделать
printf "%s\n" $GRAPH
Когда вы записываете выходные данные команды в переменную оболочки с $(…) или `…` , последний символ новой строки удаляется, и printf "%s" … (в отличие от echo) не добавляет символ новой строки по умолчанию. Итак, когда вы говорите printf "%s" $GRAPH , вы получаете следующее приглашение оболочки в той же строке, что и вывод printf .
Во-вторых, я советую вам изменить это на
printf "%s\n" "$GRAPH"
для защиты от некоторых забавных персонажей, появляющихся в $GRAPH - - и вы явно получаете забавных персонажей.
В-третьих, вы говорите: « % выглядит внутри черной полосы». Это выглядит как обратное видео, в котором цвета переднего плана и фона меняются местами. Это может быть вызвано одним или несколькими символами в $GRAPH . Если все остальное, что вы делаете до конца времени, относится к инверсному видео, даже после того, как вы сделали два вышеупомянутых шага, попробуйте
printf "%s\n" "$GRAPH"; tput sgr0
tput осуществляет терминальные функции; во многих случаях, написав строку. sgr0 - это короткое имя для функции exit_attribute_mode , которая возвращает цвета переднего плана и фона в нормальное состояние (и отключает подчеркивание, мигание и любые другие атрибуты отображения, поддерживаемые вашим терминалом).