Comando printf de Linux
Referencia completa de comandos de Linux
1. Resumen del comando printf
printf es un potente comando de salida formateada en sistemas Linux/Unix, derivado de la función printf() del lenguaje C. En comparación con el comando echo, printf proporciona un control de salida y capacidades de formato más precisos.
Características principales
- Formato preciso: Permite controlar la alineación, el ancho, la precisión de la salida, etc.
- Sin salto de línea automático: Por defecto no añade un salto de línea al final de la salida (a diferencia de echo)
- Soporte multilingüe: Admite salida de caracteres Unicode
- Inserción de variables: Puede insertar valores de variables en la cadena
2. Sintaxis básica
printf format-string [arguments...]
Descripción de parámetros
- format-string: Cadena de formato, contiene caracteres normales y especificadores de formato
- arguments: Lista de argumentos correspondientes a los especificadores de formato
3. Explicación detallada de los especificadores de formato
Los especificadores de formato comienzan con%al principio, la forma básica es:
%[flags][width][.precision]specifier
Especificadores de formato comunes
| Especificador | Descripción | Ejemplo |
|---|---|---|
| %s | Cadena | printf "%s" "hello" |
| %d | Entero decimal | printf "%d" 123 |
| %f | Número de punto flotante | printf "%f" 3.14 |
| %x | Entero hexadecimal (minúsculas) | printf "%x" 255 |
| %X | Entero hexadecimal (mayúsculas) | printf "%X" 255 |
| %o | Entero octal | printf "%o" 8 |
| %c | Carácter individual | printf "%c" 65 |
Opciones de modificadores
1. Banderas (flags)
| Bandera | Descripción | Ejemplo |
|---|---|---|
| - | Alinear a la izquierda | printf "%-10s" "hi" |
| + | Mostrar signo positivo/negativo | printf "%+d" 123 |
| 0 | Rellenar con ceros | printf "%05d" 12 |
| Espacio | Dejar espacio antes de números positivos | printf "% d" 123 |
| # | Formato especial (como prefijo 0x) | printf "%#x" 255 |
2. Ancho (width)
Especifica el ancho mínimo del campo; se rellena si es insuficiente
Ejemplo
printf "%-10s\n" "hello" # Alineación a la izquierda, ancho 10
3. Precisión (.precision)
Para números de punto flotante, especifica el número de decimales; para cadenas, especifica el número máximo de caracteres
Ejemplo
printf "%.5s\n" "abcdefg" # Salida abcde
4. Ejemplos prácticos
Ejemplo 1: Salida formateada básica
Ejemplo
Salida:
Name: Alice, Age: 25, Height: 1.68
Ejemplo 2: Salida alineada en tabla
Ejemplo
printf "%-10s %-10d %-10.2f\n" "Alice" 25 89.5
printf "%-10s %-10d %-10.2f\n" "Bob" 23 92.3
Salida:
Name Age Score Alice 25 89.50 Bob 23 92.30
Ejemplo 3: Manejo de caracteres especiales
Ejemplo
printf "Path: %s\n" "/home/user"
printf "Alert: \a\n" # Carácter de campana
Ejemplo 4: Inserción de variables
Ejemplo
age=30
printf "User: %s, %d years old\n" "$name" "$age"
5. Uso avanzado
1. Salida de fecha formateada
Ejemplo
2. Salida con colores
Ejemplo
printf "\e[32mGreen Text\e[0m\n"
3. Especificación dinámica de ancho
Ejemplo
printf "%*s\n" $width "Right aligned"
6. Preguntas frecuentes y precauciones
Problema de salto de línea: printf no añade un salto de línea por defecto, hay que añadirlo manualmente\n
Ejemplo
printf "Add newline\n"
Desajuste en el número de argumentos: Cuando hay menos argumentos que especificadores de formato, se muestra un valor indefinido
Ejemplo
Manejo de comillas: Se recomienda poner la cadena de formato entre comillas dobles, y también las variables entre comillas dobles
Ejemplo
Escape de caracteres especiales: Es necesario utilizar una barra invertida para escapar caracteres especiales en la cadena de formato
7. printf vs echo
| Característica | printf | echo |
|---|---|---|
| Salto de línea | Requiere añadir \n explícitamente | Se añade automáticamente |
| Formato | Admite formato complejo | Salida simple |
| Consistencia | Comportamiento consistente entre sistemas | Puede variar entre sistemas |
| Expansión de variables | Se debe especificar explícitamente | Expansión automática |
| Caracteres especiales | Requiere escape | Algunas versiones admiten la opción -e |