English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En el capítulo anterior aprendimos el comando echo de Shell, en este capítulo vamos a aprender otro comando de salida de Shell: printf.
El comando printf imita la función printf() de la biblioteca (library) de programas C.
El comando printf está definido por el estándar POSIX, por lo que los scripts que utilizan printf tienen mejor portabilidad que los que utilizan echo.
El comando printf utiliza texto citado o espacios para separar parámetros, se puede usar una cadena de formato dentro de printf, y también se puede definir el ancho de la cadena y el alineamiento a izquierda o derecha. Por defecto, printf no añade un salto de línea al final como hace echo automáticamente, podemos agregarlo manualmente con \n.
Sintaxis del comando printf:
printf format-string [arguments...]
Descripción de los parámetros:
format-string: es la cadena de control de formato
arguments: son la lista de argumentos.
$ echo "Hello, Shell" Hello, Shell $ printf "Hello, Shell\n" Hello, Shell $
A continuación, voy a usar un script para demostrar la poderosa función de printf:
#!/bin/bash # author:基础教程网 # url:es.oldtoolbag.com printf "%%"-10s %%-8s %%-4s\n" Nombre Sexo Peso kg printf "%%"-10s %%-8s %%-4.2f\n" Guo Jing Masculino 66.1234 printf "%%"-10s %%-8s %%-4.2f\n" Yang Guo Masculino 48.6543 printf "%%"-10s %%-8s %%-4.2f\n" Guo Fu Femenino 47.9876
Ejecutar el script, mostrar los resultados como se muestra a continuación:
Nombre Sexo Peso kg Guo Jing Masculino 66.12 Yang Guo Masculino 48.65 Guo Fu Femenino 47.99
%%s %%c %%d %%f son sustitutivos de formato,%%s salida de una cadena de caracteres,%%d salida de enteros,%%c salida de un carácter,%%f salida de números reales, en forma decimal.
%-10s indica un ancho de 10 caracteres (- indica alineación a la izquierda, sin ella indica alineación a la derecha), cualquier carácter se mostrará en 10 caracteres de ancho, si no es suficiente se rellenará automáticamente con espacios en blanco, y si es más también se mostrará todo el contenido.
%-4.2f formatear como decimal, donde .2 reservar2decimales.
#!/bin/bash # author:基础教程网 # url:es.oldtoolbag.com # format-La cadena es de comillas dobles printf "%%d %%s %%n" 1 "abc" # Los comillas simples y dobles tienen el mismo efecto printf "%%d %%s %%n" 1 "abc" # También se puede mostrar sin comillas printf %%s abcdef # El formato especifica solo un parámetro, pero los parámetros adicionales aún se mostrarán según el formato, format-La cadena se reutiliza printf %%s abc def printf "%%s %%n" abc def printf "%%s %%s %%s %%s %%s %%s %%s %%s %%s %%s" a b c d e f g h i j # Si no hay arguments, reemplazar %%s con NULL y %%d con 0 printf "%%s y %%d %%n"
Ejecutar el script, mostrar los resultados como se muestra a continuación:
1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j and 0
secuencia | Descripción |
---|---|
\a | Carácter de alerta, generalmente el carácter ASCII BEL |
\b | Retroceso |
\c | Suprimir (no mostrar) cualquier carácter de nueva línea final en los resultados de salida (sólo válido en cadenas de parámetros controladas por el indicador de formato %b), y, cualquier carácter que quede en el parámetro, cualquier siguiente parámetro y cualquier carácter que quede en la cadena de formato se ignorarán |
\f | Salto de página (formfeed) |
\n | Salto de línea |
\r | Retorno de carro (Carriage return) |
\t | Tabulación horizontal |
\v | Tabulación vertical |
\\ | un carácter literal de backslash |
\ddd | representar1a3caracteres de valor octal de dígitos. Únicamente válido en cadenas de formato |
\0ddd | representar1a3caracteres de valor octal |
$ printf "una cadena, sin procesamiento:<%s>\n" "A\nB" una cadena, sin procesamiento:<A\nB> $ printf "una cadena, sin procesamiento:<%b>\n" "A\nB" una cadena, sin procesamiento:<A B> $ printf "es.oldtoolbag.com \a" es.oldtoolbag.com $ #sin salto de línea