Как распечатать вывод, чтобы он выглядел как лестница?

Использованиеsed:

sed 's/^\([^,]*,\)\{0,2\}//' <<<"$line"
0
11.10.2019, 13:49
1 ответ

Используйте printfв оболочке bashс соответствующей шириной строки:

string='Hello World!'
for i in {0..3}; do
    width=$(( ${#string} + i*5 ))
    printf '%*s\n' "$width" "$string"
done

Здесь используется заполнитель printf%*s, который означает «выровненную по правому краю -строку ширины, заданной следующим аргументом». Ширина рассчитывается как длина строки плюс iумноженная на 5. Это означает, что вы получаете 0 дополнительных пробелов перед строкой в ​​первой итерации, 5 во второй, 10 в 3-й и 15 в последней. итерация.

С цветами:

string='Hello World!'
for i in {0..3}; do
    width=$(( ${#string} + i*5 ))
    tput setaf "$(( i + 1 ))"
    printf '%*s\n' "$width" "$string"
done

tput sgr0  # reset colors

или с изменением цвета как части строки, которую printfвыводит (сброс после каждой строки):

string='Hello World!'
color_reset=$( tput sgr0 )

for i in {0..3}; do
    width=$(( ${#string} + i*5 ))
    color=$( tput setaf "$(( i + 1 ))" )
    printf '%s%*s%s\n' "$color" "$width" "$string" "$color_reset"
done

Запуск:

$ bash script.sh
Hello World!
     Hello World!
          Hello World!
               Hello World!

enter image description here

3
28.01.2020, 02:39

Теги

Похожие вопросы