Если вам не нужно использовать оболочку bash
, используйте вместо нее zsh
:
make_readme() printf '%s\n' $1 ${(l[$#1][=])}
Где (l[length][string])
— левый -флаг расширения параметра заполнения (, который здесь вообще не применяется к параметру ).
Учитывать ширину отображения каждого символа, чтобы лучше работать с текстом, содержащим символы нулевой -ширины или двойной -ширины:
$ make_readme() printf '%s\n' $1 ${(l[$#1*3-${#${(ml:$#1*2:)1}}][=])}
$ make_readme $'Ste\u0301phane'
Stéphane
========
$ make_readme 'FOOBAR'
FOOBAR
============
(это U+FF21..U+FF3A заглавные английские буквы двойной ширины; ваш браузер может не отображать их как двойную -ширину, но ваш терминал должен ).
${(ml:width:)1}
дополняет $1
до width
, принимая во внимание ширину отображения каждого символа, что позволяет нам вычислить ширину отображения $1
путем сравнения количества символов в $1
с количеством символов, если дополняется вдвое большим количеством символов. Подробнее см. Получение ширины отображения строки символов .