Bash agrega espacios finales para justificar la cadena

Pregunta:

Mi código actual se ve así: x=${y:0:40} , que limita la longitud de la cadena a 40 caracteres. En caso de que la cadena tenga menos de 40 caracteres, ¿es posible llenar los lugares finales con espacios?

Entonces, si mi y="very short text"

Me gustaría que mi y fuera:

y="very short text (+25 trailing spaces)"

Respuesta:

Si esos caracteres son todos de un solo byte, es decir, si se encuentra en una configuración regional donde el juego de caracteres es de un solo byte (como iso8859-1) o si el juego de caracteres de la configuración regional es UTF-8 pero el texto es solo ASCII, puede hacerlo :

printf -v y %-40.40s "$y"

Eso cubrirá tanto el truncado como el relleno.

De lo contrario, siempre puede agregar 40 espacios y usar su enfoque ${y:0:40} .

printf -v pad %40s
y=$y$pad
y=${y:0:40}

zsh tiene operadores dedicados para el relleno izquierdo y derecho:

y=${(r:40:)y}

(también hace truncamiento). printf zsh cuenta en caracteres en lugar de bytes (o según el ancho de visualización de los caracteres si también se usa el indicador de expansión del parámetro m ), por lo que no tendría el problema de bash anterior. Sin embargo, tenga en cuenta que necesita zsh 5.3 o más reciente para la opción -v .

Consulte también esta respuesta a una pregunta relacionada para obtener más detalles si se enfrenta a caracteres que no todos tienen el mismo ancho.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım