Tutoriales

El comando Bash printf explicado con ejemplos

En este artículo, explicaré los usos básicos de la Impresión Bash Comando con ejemplos en Linux. Al final de este artículo, estará familiarizado con el uso del comando printf en scripts de shell bash.

Comando Bash printf

Intento proporciona dos tipos de comandos que se pueden utilizar para imprimir su salida en el terminal. Uno es que eco Comando que se usa principalmente para este propósito. El segundo es que printf Mando.

Printf es similar a eso función printf en C. Lenguaje, pero con funciones propias. La principal diferencia entre echo y printf El comando es ese printf ofrece formato y funcionalidad adicional en comparación con el echo Mando.

Si no lo has usado echo Comando antes de eso, tenemos un artículo detallado al respecto que debe consultar.

Printf es un shell integrado, pero también puede encontrar comandos externos printf. Builtin tiene prioridad sobre los comandos externos. Puede obtener esta información marcando el type Comando como se muestra a continuación.

$ type -a printf
printf is a shell builtin
printf is /usr/bin/printf
printf is /bin/printf

Para más detalles sobre type El comando se puede encontrar en las instrucciones a continuación:

Si desea ejecutar la versión externa de printf, debe apuntar a la ruta completa del directorio donde se encuentra el binario.

$ printf "Hello Worldn" # SHELL BUILTIN
$ /usr/bin/printf "Hello Worldn" # EXTERNAL VERSION OF PRINTF
Comando integrado vs. externo

Mostrar ayuda de bash printf

Como mencioné en la sección anterior, printf está integrado en bash. Tienes que abrirlo bash man page y navegue a la printf Sección.

$ man bash
/printf → presss
Ayuda de Printf
Ayuda de Printf

También puede ejecutar el siguiente comando, que es la sección de ayuda de. indica printf de El bash página de manual.

$ man bash |  menos --patrón = '^ * printf +['

Basic form of printf command

Throughout the examples, I will compare the printf with echo command to understand the commonality.

Below is the format for the printf command:

printf [-v var] formato [arguments]

Se supone que los argumentos deben hacerlo. ser entregado printf De lo contrario, fallará como se muestra en la siguiente imagen.

$ printf
$ echo $?
Printf sin argumentos
Printf sin argumentos

Pase un argumento y ejecute el printf Comando de nuevo. En el siguiente ejemplo, puede ver que agregué n, que es el carácter de nueva línea. Por defecto, printf no agregará una nueva línea como esa echo Comando así que tienes que agregar n.

$ printf «Es divertido trabajar con Linux» # SIN NUEVA LÍNEA
$ printf «Es divertido trabajar con Linux n» # CON NUEVA LÍNEA

Printf con caracteres de nueva línea
Printf con caracteres de nueva línea

Variables e interpretación de comandos

Puede incluir cualquier variable o ejecutar comandos dentro del printf Opinión. Este comportamiento es similar al echo Mando.

$ VAR1="Linux"
$ printf "$VAR1 is fun to work withn"
Interpretación de variables y comandos
Interpretación de variables y comandos

Comportamiento en comillas simples o dobles

Si encierra sus argumentos entre comillas simples, la variable y el comando se tratan como texto sin formato. Este es el mismo comportamiento en echo Comando también. Debe encerrar los argumentos entre comillas dobles si desea expandir la variable y el comando.

$ printf '$VAR1 is fun to work withn'
$ printf 'Today date = $(date)n'
Uso de comillas simples
Uso de comillas simples

Si pasa argumentos sin comillas, printf sólo toma la primera palabra como argumento y la imprime. Entonces con comillas alrededor printf es necesario.

$ printf Today date = $(date)n
Argumentos sin comillas
Argumentos sin comillas

Redirigir y redirigir la salida

Por defecto, printf envía la salida a stdout (terminal). Puede comprobar la salida con el botón. redirigir a un archivo Operador de desvío o combinarlo con el Operador de tubería para su posterior procesamiento.

# PRINT TO STDOUT
$ printf "Today date = $(date)n"
# REDIRECT TO A FILE
$ printf "Today date = $(date)n" > /tmp/tdy.txt
$ cat /tmp/tdy.txt
# PIPE
$ printf "Today date = $(date)n" | grep -i -o IST
Desvío y canalización
Desvío y canalización

Asignar salida a una variable

A veces es posible que desee el printf salida a una variable y usarla más tarde para algún procesamiento. Por lo general, ejecuta el printf entre corchetes que ejecutan el comando y asignan la salida a una variable.

$ ZONE=$(printf "Today date = $(date)n" | grep -i -o IST)
$ printf $ZONE
Salida asignada a una variable
Salida asignada a una variable

Alternativamente, puede utilizar el -v Marcar junto con printf para guardar la salida en una variable. Tienes que pasar el nombre de la variable después -v Bandera.

$ printf -v # SYNTAX
$ printf -v TIME "Today date = $(date)n"
$ echo $TIME
Guardar salida en variable
Guardar salida en variable

Declaración printf de MultiLine

Si desea imprimir más de una línea, puede encerrar el texto entre comillas dobles. Si desea imprimir una línea grande como una sola línea y desea escribir la línea en varias líneas para una mejor legibilidad del código, puede usar una barra invertida al final de cada línea, con la siguiente línea como un. Continuó a la línea anterior.

$ printf "n I am running PoP_OS
It is a great OS
With Great featuresn"
$ printf "I am running pop_os 
It is a great OS
With Great featuresn"
Declaración printf de MultiLine
Declaración printf de MultiLine

Carácter de escape de barra invertida

Puede utilizar los siguientes caracteres de escape de barra invertida en printf.

  • Carácter de nueva línea ( n)
  • Pestaña horizontal ( t) y pestaña vertical ( v)
  • Retroceso ( b)
  • Retorno de carro ( r)

Discutamos uno por uno con ejemplos.

Carácter de nueva línea ( n)

Ya hemos aprendido sobre el carácter de nueva línea (n) en todas las secciones anteriores. Carácter de nueva línea (n) agrega una nueva línea.

$ printf "Today date = $(date)n"
Signo de nueva línea
Signo de nueva línea

Pestaña horizontal ( t) y pestaña vertical ( v)

Los caracteres de tabulación horizontales y verticales se utilizan para agregar tabulaciones a su. para agregar printf Argumentos.

$ printf "Today date t $(date)n" # HORIZONTAL TAB
$ printf "Today date v $(date)n" # VERTICAL TAB
Ficha horizontal y vertical
Ficha horizontal y vertical

Retroceso ( b)

Retroceso (b) elimina una letra. Es como presionar la tecla de retroceso en nuestro teclado.

$ printf "It's a rainby day..n"
Retroceso
Retroceso

Retorno de carro ( r)

Cuando se devuelve el carro, el cursor se restablece a la primera posición (r) se utiliza. Lo que sea que venga después r reemplaza a los personajes de la primera posición.

$ printf "It's a rainbyr day..n"
Retorno de carro
Retorno de carro

Escape del carácter de barra inclinada invertida ()

Si usa caracteres especiales de escape (n, t, v, b, r) y tratarlo como una cadena y luego representarlo con una barra invertida doble ().

$ printf "It's a rain\by\r day..n"
Escape de barra invertida
Escape de barra invertida

Independientemente de lo que haya visto hasta ahora, encontrará las mismas operaciones en el echo Comando también. Si ya lo sabes echo Órdenes, en este punto debería haberse sentido muy cómodo con el printf Comando también.

Especificador de formato printf

Los especificadores de formato son una forma de expresar el valor en. para reemplazar printf en lugar del valor en. Código difícil printf. Se utilizan muchas letras para la sustitución y cada letra representa un tipo específico de datos. Si usa un identificador, debe darle una a. anteponer % Símbolo. Veamos algunos de los especificadores de formato más utilizados.

Identificador de cadena (% s)

Si desea colocar cuerdas dentro del printf, tienes que usar %s. Eche un vistazo al siguiente ejemplo. tengo un printf Declaración y quiero reemplazar el valor «Unido» dentro de printf. Entonces %s se usa, que es un especificador de cadena y cuando ejecuta el comando, el valor será «Unido» es remplazado %s.

$ printf "++ Manchester %s has a strong lineup this season" "United"
Reemplazo de cuerdas
Reemplazo de cuerdas

Puede pasar tantos argumentos de reemplazo como desee y debe usar el mismo número de identificadores dentro del argumento.

$ printf "++ %s %s has a strong lineup this %s" "Manchester" "United" "season"
Sustituir múltiples argumentos
Sustituir múltiples argumentos

¿Qué pasa si se utilizan menos identificadores y más argumentos?

Eche un vistazo al siguiente ejemplo. Al principio, solo usé un identificador y pasé tres argumentos (cadenas) para ser reemplazados. El camino printf trata esto reemplazando el primer argumento en el primer identificador y pasando el siguiente argumento al primer identificador, ya que no hay otros identificadores. De esta forma habrá tres sustituciones que en realidad son incorrectas y el resultado que queremos.

$ printf "++ %s United has a strong lineup this Seasonn" "Manchester" "United" "season"
Hubo otros argumentos
Hubo otros argumentos

Hay algunos casos de uso en los que este comportamiento tiene sentido. Eche un vistazo al siguiente ejemplo. Quiero imprimir un mensaje de bienvenida para algunos jugadores y pasar sus nombres como argumentos. Normalmente, puede guardar la lista de nombres en una matriz e iterar sobre la matriz e imprimir el mensaje. Sin embargo, esta es una forma eficaz de obtener el resultado al evitar el uso de bucles.

$ printf "++ Welcome %s to manchester unitedn" "Ronaldo" "Varane" "Jadon Sanchon"
++ Welcome Ronaldo to manchester united
++ Welcome Varane to manchester united
++ Welcome Jadon Sancho to manchester united
Múltiples argumentos con un solo identificador
Múltiples argumentos con un solo identificador

Número decimal con signo (% d) y número decimal sin signo (% u)

Para reemplazar enteros simples, use %d.

$ printf ">> Welcome %s to manchester united - You get shirt number - %dn" "Ronaldo" 7 "Varane" 19 "Jadon Sancho" 25
Enteros firmados
Enteros firmados

Para reemplazar números enteros sin signo, use %u.

$ printf "UNSIGNED INTEGER = %un" 10
Enteros sin signo
Enteros sin signo

Si intenta sustituir un tipo de datos que no sea Integer, recibirá un mensaje de error.

$ printf ">> Ronaldo gets no %dn" seven
Reemplazar el tipo de datos incorrecto
Reemplazar el tipo de datos incorrecto

Número de coma flotante (% f)

Para reemplazar números de coma flotante, use %f.

$ printf "Integer 100 to floating-point %fn" 100
Reemplazo de punto flotante
Reemplazo de punto flotante

Interpretar secuencias de escape de barra invertida

Puede pasar secuencias de escape de barra invertida como argumentos y usarlas %b mediante el cual la secuencia de escape de la barra invertida se interpreta y se expande.

$ printf "Welcome to %b Manchester united %b" "v" "n"
Secuencia de escape de barra invertida
Secuencia de escape de barra invertida

Instrucciones de conversión de Printf

Hay modificadores de conversión opcionales que puede utilizar para formatear el suyo printf Salidas.

%[flags][width][.precision]specifier

Modificador de ancho

El modificador de ancho determina el número mínimo de caracteres en la conversión. Cuando el número de caracteres es menor, los espacios se anteponen como se muestra a continuación.

$ printf "%10sn" "Ronaldo"
Modificador de ancho
Modificador de ancho

Si miras la imagen de arriba, el identificador es (Ronaldo) Séptimo Caracteres y especifiqué el ancho 10. En este caso, se agregan espacios para justificar el ancho 10.

También puede usar modificadores de bandera para justificar la alineación o agregar ceros en lugar de espacios. Por ejemplo, si la salida debe justificarse a la izquierda, puede usar un guión (-) Modificador de bandera.

$ printf "%-10sn" "Ronaldo"
Alineación
Alineación

Para valores enteros y de coma flotante, puede reemplazar el espacio con Ceros agregando un modificador de bandera cero (0).

$ printf "%010d n" 7
Reemplazar espacios con ceros
Reemplazar espacios con ceros

Modificador de precisión

Este es un parámetro opcional que se puede utilizar para especificar el número de cadenas, números enteros y posiciones de punto flotante que se imprimirán. Tienes que usar Punto(.) seguido del número entero para determinar el número de posiciones que se imprimirán.

Eche un vistazo al siguiente ejemplo. Estoy usando un especificador de cadena y estoy estableciendo el modificador de precisión en cuatro.

$ printf "%.7sn" "Ronaldo has joined Manu"
Modificador de precisión de cadena
Modificador de precisión de cadena

Asterisco (*) en lugar de valores enteros exactos. Los asteriscos aceptan argumentos de precisión en lugar de codificar el valor de precisión.

$ printf "%.*sn" 7 "Ronaldo has joined Manu"
Modificador de precisión para asteriscos
Modificador de precisión para asteriscos

diploma

Cubrimos algo de información sobre el comando Bash printf en este artículo. Para usar eso printf conveniente, simplemente practique todos los ejemplos que se dan en el artículo. Printf es mucho más poderoso para formatear que los ejemplos que mostré en este artículo. Una vez que esté familiarizado con los conceptos básicos, puede usarlo según su caso de uso printf eficiente.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba