Los especificadores de formato son cadenas que determinan los métodos de especificadores de formato. La siguiente sección incluye una lista de especificadores aceptados.
Si hay menos especificadores de formato que argumentos, los formatos de número se establecen en cero (0
), mientras que los formatos de cadena se establecen en null
(vacío).
Especificador de formato | Descripción |
%c | Trate los argumentos como un solo carácter. |
%d | Trate la entrada como un número decimal (entero) (base 10). |
%e | Trata la entrada como un número de punto flotante exponencial. |
%f | Trate la entrada como un número de punto flotante. |
%i | Trate la entrada como un número entero (base 10). |
%o | Trata la entrada como un número octal (base 8). |
%s | Trate la entrada como una cadena de caracteres. |
%u | Trate la entrada como un número decimal (entero) sin signo. |
%x | Trata la entrada como un número hexadecimal (base 16). |
%% | Imprime un signo de porcentaje. |
%Wd | Imprime la W entero X dígitos de ancho. |
%(format)T | Genera una cadena de fecha y hora resultante del uso de formato como cadena de formato para strftime . El argumento correspondiente puede ser el número de segundos desde Epoch (1 de enero de 1970, 00:00), -1 (la hora actual), o -2 (tiempo de inicio de shell). Si no se especifica un argumento, se utiliza la hora actual como valor predeterminado. |
\% | Imprime un signo de porcentaje. |
\n | Imprime una newline personaje. |
\t | Imprimir una tab personaje. |
Algunos especificadores de formato aceptan modificadores de formato que modifican sus acciones. Introduzca los modificadores entre el %
carácter y el carácter que especifica el formato.
Los modificadores de formato disponibles son:
<N>
. Introduzca un número que especifique un ancho de campo mínimo. Si el texto de salida es más corto, se rellena con espacios. Si el texto es más largo, el campo se expande.
.
(punto) . Cuando se usa con un modificador de ancho de campo, el campo no se expande para texto más largo. En su lugar, el texto se trunca.
-
. Alinea a la izquierda el texto impreso. La alineación predeterminada es correcta.
0
. Rellena los números con ceros en lugar de espacios.
<space>
. Rellena un número positivo con un espacio y un número negativo con un signo menos (-
).
+
. Imprime todos los números firmados (+
para positivo, -
para negativo).
'
. Para conversiones decimales, aplica el separador de agrupación de miles a la parte entera de la salida de acuerdo con el LC_NUMERIC actual archivo.
Ejemplos de Bash printf
Los ejemplos a continuación muestran casos de uso comunes y diferentes formas de dar formato a la salida usando printf
.
Si bien el comando puede imprimir variables en la terminal, es más beneficioso usarlo en scripts de bash, ya que permiten la reutilización del código y facilitan la automatización.
Salida separada con un carácter de nueva línea
A diferencia de echo
, usando printf
para imprimir una cadena o variable sin ningún especificador de formato, se genera el texto sin formato en una sola línea. Para agregar un carácter de nueva línea y separar las entradas, especifique el \n
especificador de formato:
Un carácter de nueva línea ahora separa la salida impresa.
Imprimir múltiples variables
Usa printf
para imprimir múltiples variables en la salida estándar. Siga los pasos a continuación:
1. Abra la terminal (Ctrl + Alternativo + T ) y cree un script bash usando un editor de texto como vi/vim :
vi script.sh
2. Introduzca las siguientes líneas:
#!/bin/bash
printf "Enter your name:\n"
read name
printf "Enter your surname:\n"
read surname
printf 'Welcome: %s\n' "$name $surname"
El %s
en la cadena de formato apunta a las variables definidas en las líneas anteriores, mientras que \n
instruye a printf
para agregar un carácter de nueva línea.
3. Guarde el script y salga de vi
ingresando:
:wq
4. Ejecute el script:
bash script.sh
5. Ingrese los valores solicitados para las dos variables y verifique el resultado:
El printf
El comando almacena la entrada en las dos variables y luego imprime las variables en la salida estándar.
Imprimir variable en una tabla simulada
Agregue automáticamente relleno dinámico o cambie la alineación de salida variable usando printf
. Siga los pasos a continuación para imprimir una variable en una tabla simulada:
1. Cree un archivo de secuencia de comandos:
vi table.sh
2. Introduzca las siguientes líneas y guarde el script:
#!/bin/bash
var='hello'
printf '|%10s|\n' "$var"
El %10
asegura que haya diez caracteres dentro de los símbolos de tubería, rellenando la salida variable con caracteres de espacio en blanco hasta esa longitud. Los s
trata la variable de entrada como una cadena.
3. Ejecute el script y verifique el resultado:
bash table.sh
El comando genera la variable encerrada en símbolos de tuberías y la alinea a la derecha de forma predeterminada. Para alinear la salida al lado izquierdo, agregue el -
modificador después del %
carácter en la cadena de formato:
#!/bin/bash
var='hello'
printf '|%-10s|\n' "$var"
Añadir puntos decimales
Usa printf
con el %f
especificador de formato para tratar la entrada como un número de punto flotante y agregar la precisión de dos lugares decimales. Siga los pasos a continuación:
1. Cree un script bash:
vi precision.sh
2. Introduzca las siguientes líneas y guarde el script:
#!/bin/bash
printf "Enter a decimal number:\n"
read number
printf "%5.2f\n" "$number"
3. Ejecute el script:
bash precision.sh
La salida imprime la variable como un número de punto flotante redondeado a dos decimales.
Almacenar datos en una variable
Usa el -v
marcar con printf
para asignar una variable de shell para almacenar los datos en lugar de imprimirlos en la salida estándar.
Siga los pasos a continuación:
1. Cree un script bash:
vi variable.sh
2. Introduzca las siguientes líneas y guarde el script:
#!/bin/bash
printf -v var 'Welcome'
printf '%s\n' "$var"
3. Ejecute el script:
bash variable.sh
La salida imprime el contenido de la variable almacenada.
Convertir números hexadecimales
El %d
especificador de formato da instrucciones a printf
para tratar la entrada como un número decimal (entero). Utilice el especificador para crear un script que convierta números hexadecimales en decimales.
Siga los pasos a continuación:
1. Cree un script bash:
vi convert.sh
2. Introduzca las siguientes líneas y guarde el script:
#!/bin/bash
printf 'Enter a hexadecimal number:\n'
read number
printf "%d\n" "$number"
3. Ejecute el script:
bash convert.sh
El script convierte el número hexadecimal de entrada en uno decimal.
Convertir números decimales a octales
Usa el %o
especificador de formato para convertir números decimales a números octales. Siga los pasos a continuación:
1. Cree un guión:
vi octal.sh
2. Introduzca las siguientes líneas y guarde el script:
#!/bin/bash
printf "Enter a decimal number:\n"
read number
printf "The octal number of "$number" is %o\n" "$number"
3. Ejecute el script:
bash octal.sh
El script convierte el valor decimal ingresado a uno octal.
Imprimir fecha
Cree un script que utilice printf
para mostrar la fecha actual. Siga los pasos a continuación:
1. Cree un guión:
vi datetime.sh
2. Introduzca las siguientes líneas y guarde el script:
#!/bin/bash
printf 'Today is %(%F)T\n' -1
El %F
trata la entrada como un número de punto flotante, mientras que -1
indica la fecha actual.
3. Ejecute el script para comprobar si funciona:
bash datetime.sh
La salida indica la fecha y la hora actuales.
Sumar comas a los miles
Cuando trate con números, use el '
modificador para hacer que la salida sea más legible agregando comas para indicar miles. Siga los pasos a continuación:
1. Cree un script bash:
vi decimals.sh
2. Introduzca las siguientes líneas:
#!/bin/bash
printf "Enter a number:\n"
read number
printf "%'d\n" $number
3. Ejecute el script:
bash decimals.sh
Después de ingresar un número, el script utiliza printf
para agregar las comas al valor de entrada automáticamente.
Obtener código ASCII de caracteres
Cree un script que use printf
para generar el ASCII de un carácter de entrada valor. Siga los pasos a continuación:
1. Cree un guión:
vi character.sh
2. Ingrese las siguientes líneas y luego guarde el script:
#!/bin/bash
printf "Enter a character to get character code:\n"
read character
printf "%d\n" "'$character"
3. Ejecute el script y pruebe si funciona:
bash character.sh
El script genera el valor ASCII del carácter de entrada.