The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Не получается создать переменную, из одних пробелов, klok79 (ok), 22-Дек-15, (0) [смотреть все]

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


5. "Не получается создать переменную, из одних пробелов"  +/
Сообщение от klok79 (ok), 23-Дек-15, 10:22 
>[оверквотинг удален]
>     local xS
>     let "xS=(80-${#1})/2"  "${#1}==0 || xS<0" \
>         && xS=0
>     printf '%*s%s\n' $xS '' "$1"
> }
> for i in 0 `seq 8 9 89`; do
>     [ $i = 0 ] &&  str=
> ||  str="$(printf '<%*s>' $i '' |tr \  -)"
>     echo "$i +$(func_ShowHead "$str")+"
> done

Мне это пока слишком для понимания. Но выглядит классно. Спасибо. Буду разбираться. Вечером отпишусь.

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

6. "Не получается создать переменную, из одних пробелов"  +/
Сообщение от erera22 (ok), 24-Дек-15, 16:33 
Все гораздо проще.

Чтобы вывести текст в центре строки, надо:
1. найти всю длину строки ($cols);
2. поделить длину всей стройки на 2, чтобы узнать центр ($tcenter);
3. прибавить к $tcenter половину длины строки с текстом ($text)

# full line length
cols=$(tput cols)
# my text
text="This is a test text"

# calculating center of line
tcenter=$(($cols/2))
# calculating shift using $tcenter and halt of text length
tshift=$(($tcenter+${#text}/2))

# making output
printf "%${tshift}s\n" "$text"

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

7. "Не получается создать переменную, из одних пробелов"  +/
Сообщение от klok79email (ok), 24-Дек-15, 22:30 
Спасибо всем огромное за ответы с примерами.
Я хотя и не понял выражение  (printf "%${tshift}s\n"), но последний пример:
cols=80
text="This is a test text"
tcenter=$(($cols/2))
tshift=$(($tcenter+${#text}/2))
printf "%${tshift}s\n" "$text"
у меня заработал.
А этот пример
func_ShowHead() {
    local xS
    let "xS=(80-${#1})/2"  "${#1}==0 || xS<0" \
        && xS=0
    printf '%*s%s\n' $xS '' "$1"
}

for i in 0 `seq 8 9 89`; do
    [ $i = 0 ] &&  str= ||  str="$(printf '<%*s>' $i '' |tr \  -)"
    echo "$i +$(func_ShowHead "$str")+"
done
я так и не смог выполнить. Показывает ошибку синтаксиса - преждевременное окончание файла. Трудно править синтаксис когда не вижу малейшего смысла в символах.
Надеюсь, со временем я смогу понять что все это значить

Еще раз СПАСИБО всем откликнувшимся на мой SOS. Тему можна считать закрытой.

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

8. "Не получается создать переменную, из одних пробелов"  +/
Сообщение от Andrey Mitrofanov (?), 25-Дек-15, 09:56 
> Я хотя и не понял выражение
> printf "%${tshift}s\n" "$text"
> у меня заработал.
> А этот пример

#!/bin/bash

Не пропустил? И _в исполняемый файл_ положил?  И да, допускаю, что могда не подойти даже версия баша. Впрочем, у меня работает, и ладно.

> func_ShowHead() {
> я так и не смог выполнить. Показывает ошибку синтаксиса - преждевременное окончание
> файла. Трудно править синтаксис когда не вижу малейшего смысла в символах.

Ну, и ладненько. Лобиться, чтоб они ещё и %) исполнялись -- и можно основывать Культ Баша.

> Надеюсь, со временем я смогу понять что все это значить

Только если будешь этим (шелом, не пониманием, да) заниматься профессионально, фулЬ-тайм.

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

9. "Не получается создать переменную, из одних пробелов"  +/
Сообщение от erera22 (ok), 25-Дек-15, 14:46 
Синтаксис printf: %<кол-во символов><тип переменной>.
В нашем случае:
% - спец символ
<кол-во символов> == ${#tshift} (это величина, она же длина, сдвига вправо)
s - выводить будем строковое значение

То есть при ${#tshift} == 80 получим:
printf "%80s" "Foo" - вывести текст Foo со сдвигом вправо на 80 символов.

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

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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