Hogar Estudio Cómo usar el comando Bash printf en Linux

Cómo usar el comando Bash printf en Linux

por Frank
Publicado: Ultima actualización en

Introducción

El comando Bash printf le brinda más flexibilidad y opciones de formato que el comando echo al escribir en una ventana de terminal de Linux. Incluso las peculiaridades de printf pueden ser beneficiosas.

Es uno de los aspectos más fundamentales de trabajar con software. Lees lo que la aplicación ha escrito en la pantalla. Incluso con el hábito derivado de Unix y compatible con Linux de que los programas de línea de comandos sean lo más breves posible, muchas aplicaciones solo escriben en la terminal cuando algo sale mal. Un básico de programación crucial es informar al usuario de lo que está ocurriendo, va a suceder o ha ocurrido recientemente.

El comando echo en el shell Bash puede escribir texto en la pantalla del terminal. Puede usarlo en secuencias de comandos o en la línea de comandos, y puede manejar variables y mostrar sus valores si están contenidos en la cadena. Entonces, ¿cuál es el punto de printf? ¿No es la escritura de texto algo de lo que se encarga el eco? Printf, por otro lado, brinda más que solo la capacidad de escribir cadenas en las ventanas de la terminal. Le brinda mucha versatilidad cuando se trata de formatear la salida, y tiene algunos trucos adicionales bajo la manga.

El comando printf en Bash es similar a la función printf en C, sin embargo, hay varios cambios. Deberá estar al tanto de los cambios si está familiarizado con C.

Creación de cadenas simples

Veamos las diferencias entre echo y printf cuando se trata de escribir cadenas en la terminal.

eco aquí hay algunas palabras
printf aquí hay algunas palabras

Usando echo y printf con palabras sin comillas

Mientras echo imprime todas las palabras, printf simplemente publica la primera. Además, printf no imprime una nueva línea. La salida es justo en el medio del símbolo del sistema. Pero antes que nada, se deben citar todas las palabras para que printf actúe sobre ellas.

eco aquí hay algunas palabras
printf "aquí hay algunas palabras"

Usando echo y printf con palabras citadas

Eso es un paso adelante. Hemos impreso todas las palabras, pero todavía estamos esperando una nueva línea. Esto se debe a que printf solo imprime una nueva línea si la solicita específicamente. Esto puede sonar inconveniente, pero le permite elegir si agregar o no uno. Debe agregar "n" en su cadena para que printf emita una nueva línea. Aquí se utiliza la secuencia de escape "nueva línea".

eco aquí hay algunas palabras
printf "aquí hay algunas palabras"

Usando echo y printf con palabras entre comillas y el carácter de nueva línea

Usará una nueva línea algunas veces y otras no. En este ejemplo, un comando printf utiliza una nueva línea mientras que el otro no.

printf "Cómo hacer" && printf "Geekn"

Usando dos printfs para crear una sola línea de texto

Debido a que el primer printf no imprime una nueva línea, la salida del segundo printf se coloca en la misma línea que "Cómo hacer". Para imprimir una nueva línea, el segundo printf usa n. El símbolo del sistema ahora se mostrará en la línea debajo del texto impreso.

Personajes que han eludido la captura

Aquí hay algunos caracteres adicionales que pueden usarse como escapes. Ya has visto cómo funciona "n".

n: Cambia a una nueva línea.
r: Este comando imprime un retorno de carro. El cursor de salida vuelve al principio de la línea actual.
t: este comando imprime un carácter de tabulación.
v: agrega un espacio de tabulación vertical a la página.
\: Se imprime un carácter de barra invertida.
“: Muestra una comilla.
b: Muestra el carácter de retroceso.

El carácter de escape de retorno de carro se utiliza para devolver el cursor al principio de la línea actual.

printf "La miel es la raíz de todos los malesrDinero"

Uso del carácter de retorno de carro para volver al principio de la línea

El comando printf lee de izquierda a derecha. Hasta que printf detecta el carácter de escape "r", la cadena se escribe como texto normal. El cursor de salida se reposiciona al principio de la línea actual.

Con la letra inmediatamente debajo del carácter “r”, continúa el procesamiento de la cadena. El resto hace que printf imprima "Dinero", que reemplaza la frase "Cariño".

El carácter de barra invertida "" señala secuencias de escape, mientras que las comillas """ se utilizan para citar cadenas. Si desea imprimir estos caracteres, use una barra invertida para escaparlos. Esto le indica a printf que deben tratarse como caracteres literales.

printf "Esto es una tTab, esto es una comilla ", y esto \ es una barra invertida"

Escapar personajes para que sean tratados literalmente

Variables en Acción

El uso de variables con printf es bastante similar al uso de variables con echo. Para incluir una variable, como esta variable de entorno, use el signo de dólar "$" como de costumbre antes.

printf "Directorio de inicio: $HOMEn"

Usar printf con una variable de entorno

Formato de cadena

Las cadenas de formato son cadenas que especifican el formato de salida. Usted proporciona el texto de la cadena de formato y los valores adicionales para trabajar como argumentos.

El texto, las secuencias de escape y los especificadores de formato pueden incluirse en la cadena de formato.

Los especificadores de formato de Printf le informan qué tipo de argumento debe aceptar, como cadenas, números o caracteres.

Los especificadores de formato más frecuentes se muestran a continuación. Un símbolo de porcentaje “por ciento” los precede a todos. Puede imprimir un signo de porcentaje combinando dos signos de porcentaje "por ciento por ciento".

  • %s: Imprime una cadena.
  • %c: Imprime un solo carácter.
  • %d: Imprime un número entero.
  • %f: imprime un número de punto flotante.
  • %u: Imprime un entero sin signo.
  • 1TP2A: Imprime un valor en octal.
  • %x: Imprime un valor enhexadecimal, en minúsculas.
  • %X: Imprime un valor en hexadecimal, en mayúsculas.
  • %e: Imprime un número de coma flotante en notación científica, en minúsculas.
  • %E: Imprime un número de coma flotante en notación científica, en mayúsculas.
  • %%: Imprime un símbolo de porcentaje “%”.
printf "Cómo hacer %sn" "Geek"
printf "%s%s %sn" "Cómo" "-Para" "Geek"

Mostrando printf aceptando "demasiados" argumentos

La cadena de formato del primer comando contiene algo de contenido propio. La cadena "Geek" se envía a printf como argumento. El especificador de formato “%s” lo compara y lo imprime. Entre la cadena de formato y la cadena de argumento, solo hay un espacio. En C, se requeriría una coma para separarlos, pero con la versión Bash de printf, un espacio es suficiente.

Solo los especificadores de formato y la secuencia de escape de nueva línea se incluyen en la segunda cadena de formato. Cada uno de los especificadores de formato "%s" consume los tres parámetros de cadena a su vez. Nuevamente, en C, se requiere una coma entre cada parámetro, pero la función printf de Bash nos permite ignorar este requisito.

Simplemente use el especificador de formato adecuado para generar varios tipos de argumentos. Aquí hay una función simple de conversión de números basada en printf. En notación decimal, octal y hexadecimal, imprimiremos el número 15.

printf "diciembre: %dnOct: %onHex: %xn" 15 15 15

usando printf para imprimir valores numéricos en diferentes notaciones base

Vamos a reducirlo un poco para que el ejemplo esté menos recargado.

printf "Hexadecimal: %xn" 15

Imprimir un valor hexadecimal

La mayoría de nosotros estamos acostumbrados a ver números hexadecimales representados en mayúsculas y con valores inferiores a 0x10 precedidos por un cero inicial. Podemos hacer esto colocando un especificador de ancho entre el signo de porcentaje "%" y el carácter "X" y utilizando el especificador de formato hexadecimal en mayúsculas "% X".

Esto especifica el tamaño del campo en el que se debe imprimir el argumento para printf. Se han añadido espacios al campo. Los números de dos dígitos se presentarían sin relleno en este estilo.

printf "Hexadecimal: %2Xn" 15

imprimiendo un valor hexadecimal en mayúsculas en un campo de 2 caracteres de ancho

Ahora tenemos un valor en mayúsculas con un espacio inicial escrito en él. Al colocar un cero delante de los dos, podemos hacer que printf complete el campo con ceros en lugar de espacios:

printf "Hex: %02Xn" 15

imprimiendo un valor hexadecimal en mayúsculas en un campo de 2 caracteres de ancho rellenado con ceros

El especificador de precisión le permite especificar cuántos puntos decimales deben incluirse en la salida.

printf "Floating point: %08.3fn" 9.243546

Uso de modificadores de ancho y precisión con un número de punto flotante

Esto hace que la creación de tablas de resultados con resultados perfectamente alineados sea muy sencilla. Este comando también muestra otra de las idiosincrasias de Bash printf. Si hay más argumentos que especificadores de formato, los argumentos se introducen en la cadena de formato en lotes hasta que se agotan. La cantidad de especificadores de formato en la cadena de formato determina el tamaño del lote que se procesa en un momento dado. Los argumentos adicionales enviados a la función printf en C se ignoran.

printf "Flotante: %8.3fn" 9.243546 23.665 8.0021

Uso de modificadores de ancho y precisión para crear una tabla ordenada

Las cadenas también pueden emplear los especificadores de ancho y precisión. Las cadenas se imprimen en un campo de 10 caracteres de ancho usando este comando.

printf "%10s %dn" "coats" 7 "shoes" 22 "Umbrellas" 3

Usando el modificador de ancho con cadenas

De forma predeterminada, los valores se justifican a la derecha en sus campos. Para justificarlos a la izquierda, use un signo menos "-” inmediatamente detrás del porcentaje “%" firmar.

printf "%-10s %d" "abrigos" 7 "zapatos" 22 "Paraguas" 3

Usando un especificador de ancho justificado a la izquierda con cadenas

El especificador de precisión le permite elegir el número máximo de caracteres que se imprimirán. Los dos puntos “:” se utilizan para indicar las limitaciones del ancho del campo. No en la forma en que se abrevia el término "paraguas".

printf ":%10.6s:n" "coats" "shoes" "Umbrellas"
printf ":%-10.6s:n" "abrigos" "zapatos" "Paraguas"

Usar el modificador de precisión para limitar la cantidad de caracteres que se imprimen de una cadena

Incluso como argumento, se puede usar el especificador de ancho. En lugar de un especificador numérico, use un asterisco "*" y proporcione el ancho como una entrada de número entero.

printf "%*sn" 20 "Más a la derecha" 12 "Medio" 5 "más a la izquierda"

Pasar el especificador de ancho como argumento a printf

Otras rarezas y trucos

Los especificadores de formato en la cadena de formato operarán con valores del tipo adecuado, ya sea que se proporcionen como argumentos ordinarios en la línea de comando o se creen como resultado de una expresión.

Esto muestra el resultado de sumar dos números:

imprimir "23+32=%dn" $((23+32))

Imprimir la suma de dos números

El número de carpetas en el directorio de trabajo actual se imprime con este comando:

printf "Hay %d directoriosn" $(ls -d */ | wc -l)

Contando directorios con printf

El comando printf imprime una cadena que fue devuelta desde otro programa.

printf "Usuario actual: %sn" $(whoami)

Imprimir la salida de otro comando

Si el especificador de formato de cadena "porcentaje s" no se proporciona con un argumento, printf devuelve nulo.

printf "Uno: %s dos: %sn" "Alfa"

Cómo maneja printf los argumentos de cadena que faltan

Si se da un valor numérico por accidente para el especificador de formato de cadena "% s", lo imprime como una cadena y no se queja. Si hace esto usando C printf, terminará con muchos problemas. Es casi seguro que su software fallará. A Bash printf, por otro lado, no parece importarle.

printf "Uno: %s dos: %sn" "Alfa" 777

Cómo printf acepta silenciosamente enteros como valores de cadena

Si el especificador de formato entero "% d" no recibe un argumento, se imprime cero.

printf "Entero: %dn"

Cómo maneja printf los argumentos enteros que faltan

Bash generará un mensaje de error y printf imprimirá cero si el especificador de formato entero "% d" recibe una cadena de entrada por accidente.

printf "Entero: %dn" "Siete"

Cómo trata printf las cadenas que se proporcionan en lugar de los argumentos enteros

Se pueden crear símbolos incómodos ingresando su número Unicode, también conocido como "punto de código". La letra "u" se usa para escapar de ciertos caracteres, seguida de su valor Unicode.

printf "El símbolo del euro: u20ACn"

Imprimir un valor Unicode escapado

Para acomodar las secuencias de escape en las cadenas de argumentos, utilice el especificador de formato "% b" en lugar del especificador de formato de cadena "% s" en la cadena de formato.

imprimir "%s" "u20ACn"
imprimir "%b" "u20ACn"

Usando el especificador de formato %b para manejar secuencias de escape en argumentos de cadena

El comando printf inicial no reconoce la secuencia de escape de nueva línea y no procesa el valor Unicode. El especificador de formato "% b" se usa en el segundo comando printf. El carácter Unicode se maneja adecuadamente y se muestra una nueva línea.

Caballos de carreras

Es posible que solo necesite repetir algún texto en la ventana del terminal de vez en cuando. Sin embargo, printf es la herramienta ideal para la tarea cuando necesita aplicar algo de posicionamiento y formato.

printf "%b" "Tha-" "tha-" "tha-" "eso es todo amigos.n"

También te puede interesar

Navhow se dedica a enseñar a personas de todo el mundo cómo hacer cualquier cosa.

 

Suscribir

El mejor boletín de instrucciones en cualquier lugar

©2022 Navhow, Todos los derechos reservados