Jeśli wszystkie te znaki są jednobajtowe, to znaczy, jeśli znajdujesz się w lokalizacji, w której zestaw znaków jest jednobajtowy (jak iso8859-1) lub jeśli zestaw znaków w lokalizacji jest UTF-8, ale tekst jest tylko ASCII, możesz to zrobić :
printf -v y %-40.40s "$y"
Obejmuje to zarówno obcinanie, jak i padding.
Jeśli nie, zawsze możesz dodać 40 spacji i zastosować swoje ${y:0:40}
podejście.
printf -v pad %40s
y=$y$pad
y=${y:0:40}
zsh
ma dedykowanych operatorów dla lewej i prawej wyściółki:
y=${(r:40:)y}
(także obcinanie). zsh
„s printf
liczy się w znaki zamiast bajtów, więc nie miałby bash
” s problem powyżej. Pamiętaj jednak, że zsh
do tej -v
opcji potrzebujesz 5.3 lub nowszej wersji .
Zobacz także tę odpowiedź na powiązane pytanie, aby uzyskać więcej informacji, jeśli napotkasz postacie, które nie mają tej samej szerokości.