Si ces caractères sont tous codés sur un octet, c'est-à-dire si vous vous trouvez dans un environnement local où le jeu de caractères est à un octet (comme iso8859-1) ou si le jeu de caractères de l'environnement local est UTF-8 mais que le texte est en ASCII uniquement, vous pouvez le faire :
printf -v y %-40.40s "$y"
Cela couvrira à la fois la troncature et le remplissage.
Sinon, vous pouvez toujours ajouter 40 espaces et utiliser votre ${y:0:40}
approche.
printf -v pad %40s
y=$y$pad
y=${y:0:40}
zsh
a des opérateurs dédiés pour le rembourrage gauche et droit:
y=${(r:40:)y}
(fait également la troncature). zsh
« de printf
la numération en caractères au lieu d'octets, ne serait donc pas bash
» la question de ci - dessus. Notez cependant que vous avez besoin de zsh
5.3 ou plus récent pour le-v
option.
Voir aussi cette réponse à une question connexe pour plus de détails si vous êtes confronté à des personnages qui n'ont pas tous la même largeur.
Stéphane Chazelas
la source