Якщо ці символи є однобайтовими, тобто якщо ви знаходитесь у локалі, де набір однобайтових (наприклад, iso8859-1) або якщо шаблоном локалі є UTF-8, але текст лише ASCII, ви можете це зробити :
printf -v y %-40.40s "$y"
Це буде охоплювати як обрізки, так і накладки.
Якщо ні, ви завжди можете додати 40 пробілів і використовувати свій ${y:0:40}
підхід.
printf -v pad %40s
y=$y$pad
y=${y:0:40}
zsh
має спеціальні оператори для лівої та правої прокладки:
y=${(r:40:)y}
(також робить усічення). zsh
«S printf
підраховує в символах замість байт, так що не матиме bash
» проблеми з вище. Однак зауважте, що вам потрібен zsh
5.3 або новіший -v
варіант.
Дивіться також цю відповідь на пов'язане запитання для отримання більш детальної інформації, якщо ви стикаєтеся з персонажами, які не мають однакової ширини.