И снова понедельник и снова на работу. Сегодня про оптимизацию и управляющие последовательности. Бест-практики, трувей ёпта!

Источник: оригинал в Telegram

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Если в своих скриптах или программах ты часто используешь одинаковые управляющие последовательности, имеет смысл сохранить результаты работы утилиты tput в переменную.

Скучная теория

Практика

Чтобы не усложнять, рассмотрим пример на основе clear. Эта команда очищает экран.

clear=$(tput clear)

Помещаем в переменную очистку экрана. Теперь проверяем:

printf '%s' $clear
echo -n $clear

После выполнения одной из этих команд, экран терминала будет очищен.

А почему просто не выполнить команду clear без этих вонючих tput? Потому что это самый простой пример, чтобы ты въехал в суть.

Получается, мы не плодим в своих скриптах кучу tput clear, а используем оптимизированный вариант с переменной.

Чем больше параметров в tput, тем больше треша в скриптах. Проще же один раз закинуть в переменную эту кишку и не маяться хуйнёй.

Посмотреть управляющую последовательность ты можешь так:

echo ${clear@Q}

На экран выведется:

$'\E[H\E[2J\E[3J'

Конструкция: ${clear@Q} это использование параметра расширения в Bash, который отображает значение переменной clear в форме, пригодной для использования в качестве строки в программном коде. Это означает, что специальные символы будут экранированы.

Начиная с версии 4.4 в Bash, значение parameter заключается в одинарные кавычки.

${parameter@Q}

Пример одной строкой:

tput cup 20 60 | { read -r BASHDAYS; echo ${BASHDAYS@Q}; }

1. Генерируем управляющую последовательность для перемещения курсора терминала на 20-ю строку и колонку 60. 2. Передаем полученную строку по пайпу. 3. Читаем строку и присваиваем ее переменной BASHDAYS. 4. Выводим значение переменной BASHDAYS.

По итогу получаем такое:

$'\E[21;61H'

Еще вариант:

tput cup 1 10 | cat -v ; echo

Результат сам посмотришь, если интересно.

Для многих это тема не новая, но я частенько наблюдаю в скриптах избыточное применение этих управляющих последовательностей.

Короче пихай это говнище в переменную и будет заебись!

На закуску держи интересный пример определения и сохранения последовательностей.

Давай краба, увидимся!