Я пробую в своем терминале следующее:

spark 0 76 100 | awk '{print substr($0,4,3)}'

выходы:

Если я сделаю:

GRAPH=$(spark 0 25 100 | awk '{print substr($0,4,3)}')
printf "%s" $GRAPH

Я получил:

▂%

Но выглядит больше как:

как выглядит персонаж

Как видите, % выглядит внутри черной полосы ...

Как я могу заставить его распечатать:

Без неожиданного% в той же строке?

1 ответ1

0

Краткий ответ - сделать

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 , которая возвращает цвета переднего плана и фона в нормальное состояние (и отключает подчеркивание, мигание и любые другие атрибуты отображения, поддерживаемые вашим терминалом).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .