Можно ли отключить вывод знаков табуляции у echo?, inFlowiaLab, 13-Май-20, 15:19 [смотреть все]Хочу чтобы в скриптах сохранялись табуляции для удобного чтения, но если их там оставлять то многострочный вывод вроде такого: echo "что то там и ещё что-то там " приведёт к тому, что в консоли только первая строка начнётся с начала строки а остальные строки будут сдвинуты вправо согласно табуляции. Из за этого пишу все скрипты длинным монолитом без табуляции на условиях и циклах что потом аукается при отладке. Можно как-то отключать вывод табуляции в echo, либо как её удалить? Я вообще вывожу текст через собственные функции-оформляшки, могу внедрить удаление табуляций туда. Попытался таким образом: # штатная болтовня tellifl() { local s=$1 s=${s//\t/} echo -en "$(tput setaf 2; tput bold)$s$(tput sgr0)" } то есть удалить через s=${s//\t/} - ничего не вышло. Все табуляции на месте. Хотя сама конструкция s=${s//\t/} успешно работает "в стендовых примерах"...
|
- Можно ли отключить вывод знаков табуляции у echo?, inFlowiaLab, 17:47 , 13-Май-20 (1)
Ааа! Табуляцию нужно было удалять по реальной табуляции а не по "\t" теперь всё работает:
delTabIFL() { echo "${1//" "/}" } tellifl() { echo -en "$(tput setaf 2; tput bold)$(delTabIFL "$1")$(tput sgr0)" }
Есть правда пара минусов у такой реализации: Почему-то обрубает финальный перенос строки если он оформлен нажатием на Enter а не через \n. То есть такой вариант:
tellifl "fdsfsfd dffgdfgdfg dfsfdsfd "
выводит всё это без последнего переноса строки. Если нужен перенос строки в конце нужно юзать именно \n а не Enter:
tellifl "fdsfsfd dffgdfgdfg dfsfdsfd \n"
Проблема номер 2 загадочна и непонятна - если редактировать текст скрипта в Atom то иногда табуляции никак не вырезаются пока не переоткроешь Atom и не сотрёшь все проблемные табуляции и не сделаешь их заново. (Случилось 1 раз)
- Можно ли отключить вывод знаков табуляции у echo?, ACCA, 23:36 , 13-Май-20 (3)
> Хочу чтобы в скриптах сохранялись табуляции для удобного чтения, но если их > там оставлять то многострочный вывод вроде такого: > echo "что то там > и ещё что-то там > " Есть такой редирект - "<<-". Например cat <<- ... что то там и ещё что-то там ... Скусывает ТАБУЛЯЦИЮ в начале строк.
- Можно ли отключить вывод знаков табуляции у echo?, inFlowiaLab, 19:51 , 14-Май-20 (4)
> Есть такой редирект - "<<-". Например Блин, конкретно по этому редиректу инфы не нашёл. Ни разу не пользовался им и вообще редиректами ввода. Можете показать пример рабочего кода, чтобы я въехал как при помощи него на экран многострочный текст выводить?
- Можно ли отключить вывод знаков табуляции у echo?, ACCA, 21:51 , 15-Май-20 (5)
>> Есть такой редирект - "<<-". Например > Блин, конкретно по этому редиректу инфы не нашёл. Ни разу не пользовался > им и вообще редиректами ввода. Можете показать пример рабочего кода, чтобы > я въехал как при помощи него на экран многострочный текст выводить? То, что я показал и есть пример рабочего кода. Сделай copy/paste, только в начале строк поставь не пробелы, а табуляции. INPUT TEXT в web не понимает, что такое табуляция. Посмотри, что получится. #!/bin/bashcat <<- ... слова слова ...
- Можно ли отключить вывод знаков табуляции у echo?, ACCA, 21:53 , 15-Май-20 (6)
>[оверквотинг удален] > То, что я показал и есть пример рабочего кода. Сделай copy/paste, только > в начале строк поставь не пробелы, а табуляции. INPUT TEXT в > web не понимает, что такое табуляция. Посмотри, что получится. > > #!/bin/bash > cat <<- ... > слова > слова > ... > Документацию смотри здесь https://tldp.org/LDP/abs/html/here-docs.html
- Можно ли отключить вывод знаков табуляции у echo?, inFlowiaLab, 17:10 , 16-Май-20 (7)
Спасибо! Понял: любой набор символов после <<- и тот же набор символов в последней строке - это ограничители сообщения, вот этого не понимал, думал - это троеточия от балды и не писал их) Код действительно работает в такой форме и действительно съедает табы но увы воспользоваться такой конструкцией я не смогу. Дело в том, что если передать туда текст при помощи переменной, а текст в переменной будет с табуляциями - эти табуляции будут сохранены. Жаль. Этот вариант с редиректом не съедает последний перенос строки, эта проблема была бы решена. Вот если что код который я пытался реализовать:
tellifl() { cat <<- ... $(tput setaf 2; tput bold)$1$(tput sgr0) ... }#применение функции: tellifl "длинный многострочный текст с табуляциями "
Ладно, вприниципе проблема съедения последнего переноса строки не такая уж и проблема, просто заменять его на \n, да больше времени занимает чем Enter, но зато код компактнее.
|