Linux / Comando printf: dar formato a cadenas y números en el shell

printf imprime cadenas y números según una cadena de formato. Permite un control más claro de saltos de línea y ancho de columna que echo, lo que lo hace útil en scripts de shell.

En Bash, printf es un comando interno del shell, y también puede existir el printf externo de GNU Coreutils. Compruebe con type printf qué implementación se ejecuta. No hay salto de línea automático, por lo que coloque \n en la cadena de formato si es necesario.

Sintaxis básica

printf 'cadena_de_formato' [valor ...]

La implementación instalada y las opciones pueden variar según la distribución. Verifique la descripción de man printf en el sistema actual.

Ejemplos de uso

Cadenas y saltos de línea

Inserte valores en lugar de %s y termine la línea con \n.

printf 'Hello, %s\n' Linux

Ajuste de ancho de columna

Fije el ancho de alineación a la izquierda y el ancho numérico para crear una tabla sencilla.

printf '%-12s %5d\n' apple 42

Repetir la impresión de varios valores

La cadena de formato se aplica repetidamente a los argumentos restantes.

printf '%s\n' one two three

Comparar cadenas de formato con la salida real

printf inserta los argumentos en los especificadores del formato, en orden. %-6s alinea la cadena a la izquierda en un ancho mínimo de seis caracteres y %03d rellena el entero con ceros hasta un mínimo de tres dígitos. Ninguno de esos anchos recorta un valor más largo.

printf '[%-6s] [%03d]\n' apple 7

Ejemplo de salida:

[apple ] [007]

\n al final de la cadena de formato es un salto de línea. A diferencia de echo, printf no añade un salto de línea automático, así que especifíquelo si es necesario. Si se inserta la entrada del usuario directamente en la cadena de formato, % o la barra invertida podrían interpretarse, por lo que se utiliza un formato fijo como printf '%s\n' "$value".

Opciones y formatos principales

Formato o secuencia Descripción
%s Imprime valores como cadenas.
%d Imprime números enteros en decimal.
%f Imprime números reales con la precisión especificada.
\n Representa un salto de línea dentro de la cadena de formato.
%-Ns Alinea una cadena a la izquierda dentro de al menos N caracteres.

Precauciones al usar

Si utiliza datos del usuario como cadena de formato, sus signos % y secuencias de escape pueden interpretarse como instrucciones de formato. Para imprimirlos literalmente, utilice un formato fijo como printf '%s\n' "$value". Ponga las expansiones de variables entre comillas para evitar separación en palabras y expansión de comodines.

Preguntas frecuentes

¿printf agrega automáticamente un salto de línea al final como echo?

No. Para cambiar de línea, debe incluir \n directamente en la cadena de formato.

Documentación oficial

Puede verificar el comportamiento exacto de las opciones y las diferencias entre implementaciones en la documentación oficial de printf.

Para el comportamiento de comandos externos, también consulte el manual oficial de GNU Coreutils.