Используйте 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!