Si todos esos caracteres son de un solo byte, es decir, si se encuentra en un entorno local donde el conjunto de caracteres es de un solo byte (como iso8859-1) o si el conjunto de caracteres del entorno local es UTF-8 pero el texto es solo ASCII, puede hacerlo :
printf -v y %-40.40s "$y"
Eso cubrirá tanto el truncamiento como el relleno.
Si no, siempre se puede añadir 40 plazas y usar su ${y:0:40}
enfoque.
printf -v pad %40s
y=$y$pad
y=${y:0:40}
zsh
tiene operadores dedicados para el relleno izquierda y derecha:
y=${(r:40:)y}
(también hace truncamiento). zsh
's printf
cuenta en caracteres en lugar de bytes, por lo que no tendrían bash
' s tema anterior. Sin embargo en cuenta que necesita zsh
5.3 o posterior para la -v
opción.
Véase también la respuesta a una pregunta relacionada para más detalles si se enfrenta con personajes que no todos tienen la misma anchura.