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.
Tabla de Contenidos
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
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
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 $?
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
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"
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'
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
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
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
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
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"
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"
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
Retroceso ( b)
Retroceso (b
) elimina una letra. Es como presionar la tecla de retroceso en nuestro teclado.
$ printf "It's a rainby day..n"
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"
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"
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"
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"
¿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"
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
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
Para reemplazar números enteros sin signo, use %u
.
$ printf "UNSIGNED INTEGER = %un" 10
Si intenta sustituir un tipo de datos que no sea Integer, recibirá un mensaje de error.
$ printf ">> Ronaldo gets no %dn" seven
Número de coma flotante (% f)
Para reemplazar números de coma flotante, use %f
.
$ printf "Integer 100 to floating-point %fn" 100
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"
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"
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"
Para valores enteros y de coma flotante, puede reemplazar el espacio con Ceros agregando un modificador de bandera cero (0).
$ printf "%010d n" 7
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"
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"
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.