URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID15
Нить номер: 4608
[ Назад ]

Исходное сообщение
"Можно ли отключить вывод знаков табуляции у 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 , 13-Май-20 17:47 
Ааа! Табуляцию нужно было удалять по реальной табуляции а не по "\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?"
Отправлено inFlowiaLab , 13-Май-20 21:44 
Проблема № 2 решается отключением в текстовом редакторе функции soft tab (замена символа табуляции на пробелы)

"Можно ли отключить вывод знаков табуляции у echo?"
Отправлено ACCA , 13-Май-20 23:36 
> Хочу чтобы в скриптах сохранялись табуляции для удобного чтения, но если их
> там оставлять то многострочный вывод вроде такого:
>     echo "что то там
>     и ещё что-то там
>     "

Есть такой редирект - "<<-". Например
      cat <<- ...
        что то там
        и ещё что-то там
      ...

Скусывает ТАБУЛЯЦИЮ в начале строк.


"Можно ли отключить вывод знаков табуляции у echo?"
Отправлено inFlowiaLab , 14-Май-20 19:51 
> Есть такой редирект - "<<-". Например

Блин, конкретно по этому редиректу инфы не нашёл. Ни разу не пользовался им и вообще редиректами ввода. Можете показать пример рабочего кода, чтобы я въехал как при помощи него на экран многострочный текст выводить?


"Можно ли отключить вывод знаков табуляции у echo?"
Отправлено ACCA , 15-Май-20 21:51 
>> Есть такой редирект - "<<-". Например
> Блин, конкретно по этому редиректу инфы не нашёл. Ни разу не пользовался
> им и вообще редиректами ввода. Можете показать пример рабочего кода, чтобы
> я въехал как при помощи него на экран многострочный текст выводить?

То, что я показал и есть пример рабочего кода. Сделай copy/paste, только в начале строк поставь не пробелы, а табуляции. INPUT TEXT в web не понимает, что такое табуляция. Посмотри, что получится.


#!/bin/bash

cat <<- ...
    слова
    слова
...



"Можно ли отключить вывод знаков табуляции у echo?"
Отправлено ACCA , 15-Май-20 21:53 
>[оверквотинг удален]
> То, что я показал и есть пример рабочего кода. Сделай copy/paste, только
> в начале строк поставь не пробелы, а табуляции. INPUT TEXT в
> web не понимает, что такое табуляция. Посмотри, что получится.
>
 
> #!/bin/bash
> cat <<- ...
>  слова
>  слова
> ...
>

Документацию смотри здесь https://tldp.org/LDP/abs/html/here-docs.html


"Можно ли отключить вывод знаков табуляции у echo?"
Отправлено inFlowiaLab , 16-Май-20 17:10 
Спасибо! Понял: любой набор символов после <<- и тот же набор символов в последней строке - это ограничители сообщения, вот этого не понимал, думал - это троеточия от балды и не писал их) Код действительно работает в такой форме и действительно съедает табы но увы воспользоваться такой конструкцией я не смогу. Дело в том, что если передать туда текст при помощи переменной, а текст в переменной будет с табуляциями - эти табуляции будут сохранены. Жаль. Этот вариант с редиректом не съедает последний перенос строки, эта проблема была бы решена.
Вот если что код который я пытался реализовать:

tellifl() {
    cat <<- ...
    $(tput setaf 2; tput bold)$1$(tput sgr0)
    ...
}

#применение функции:
tellifl "длинный
       многострочный
             текст
                   с табуляциями

"


Ладно, вприниципе проблема съедения последнего переноса строки не такая уж и проблема, просто заменять его на \n, да больше времени занимает чем Enter, но зато код компактнее.