The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Можно ли отключить вывод знаков табуляции у echo?"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на рабочей станции (Консоль / Linux)
Изначальное сообщение [ Отслеживать ]

"Можно ли отключить вывод знаков табуляции у echo?"  +/
Сообщение от inFlowiaLab (ok), 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/} успешно работает "в стендовых примерах"...

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Можно ли отключить вывод знаков табуляции у echo?"  +/
Сообщение от inFlowiaLab (ok), 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 раз)
Ответить | Правка | Наверх | Cообщить модератору

2. "Можно ли отключить вывод знаков табуляции у echo?"  +/
Сообщение от inFlowiaLab (ok), 13-Май-20, 21:44 
Проблема № 2 решается отключением в текстовом редакторе функции soft tab (замена символа табуляции на пробелы)
Ответить | Правка | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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


#!/bin/bash

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


Ответить | Правка | Наверх | Cообщить модератору

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

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

"


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

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру