A resposta curta é fazer
printf "%s\n" $GRAPH
Quando você captura a saída de um comando em uma variável de shell com $(…) ou '…' , a última nova linha é removida e printf "%s" … (ao contrário de echo ) não anexa uma nova linha por padrão. Então, quando você diz printf "%s" $GRAPH , você está obtendo o próximo prompt do shell na mesma linha que o printf output.
Em segundo lugar, eu aconselho você a mudar isso para
printf "%s\n" "$GRAPH"
para proteger contra certos personagens engraçados que aparecem em $GRAPH –– e você está claramente obtendo personagens engraçados.
Em terceiro lugar, você diz "o % parece estar dentro de uma barra preta". Parece ser um vídeo inverso , no qual as cores do primeiro plano e do fundo são invertidas. Isso pode ser causado por um ou alguns dos caracteres em $GRAPH . Se tudo o que você fizer até o final do tempo estiver em vídeo inverso, mesmo depois de ter feito as duas etapas acima, tente
printf "%s\n" "$GRAPH"; tput sgr0
tput exerce a funcionalidade específica do terminal; em muitos casos, escrevendo uma string. sgr0 é o nome abreviado da capacidade exit_attribute_mode , que define as cores do primeiro plano e do plano de fundo de volta ao normal (e desativa o sublinhado, pisca e quaisquer outros atributos de exibição suportados pelo terminal).