English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Nós estudamos o comando echo do Shell no capítulo anterior, neste capítulo, vamos aprender outro comando de saída do Shell, o printf.
O comando printf imita a função printf() da biblioteca de programas do C.
O printf é definido pelo padrão POSIX, portanto, scripts que usam printf têm melhor portabilidade em comparação com echo.
O printf usa texto de referência ou espaços para separar os parâmetros, você pode usar strings formatadas no printf, além de definir a largura da string e o alinhamento esquerda/direita. O printf padrão não adiciona automaticamente o caractere de nova linha como o echo, podemos adicionar manualmente \n.
Sintaxe do comando printf:
printf format-string [arguments...]
Descrição dos parâmetros:
format-string: é a string de controle de formato
arguments: é a lista de argumentos.
$ echo "Olá, Shell" Olá, Shell $ printf "Olá, Shell\n" Olá, Shell $
A seguir, vou usar um script para demonstrar o poderoso funcionamento do printf:
#!/bin/bash # author:基础教程网 # url:pt.oldtoolbag.com printf "%%-10s %%-8s %%-4s\n" Nome 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 Feminino 47.9876
Executar o script, o resultado será como mostrado a seguir:
Nome Sexo Peso kg Guo Jing Masculino 66.12 Yang Guo Masculino 48.65 Guo Fu Feminino 47.99
%s %%c %%d %%f são substitutos de formato,%%s para exibir uma string,%%d para exibir números inteiros,%%c para exibir um caractere,%%f para exibir números reais, em forma decimal.
%-10s para um comprimento de largura 10 caracteres (- representa alinhamento à esquerda, sem ele representa alinhamento à direita), qualquer caractere será exibido no 10 caracteres de largura, se não for suficiente, será preenchido automaticamente com espaços, e se exceder, também será exibido todo o conteúdo.
%-4.2f para formatar como decimal, onde .2 para manter2dígitos decimais.
#!/bin/bash # author:基础教程网 # url:pt.oldtoolbag.com # format-A string é entre aspas duplas printf "%%d %%s %%n" 1 "abc" # A efeito, os aspas simples e duplas são iguais printf "%%d %%s %%n" 1 "abc" # Sem aspas também pode ser exibido printf %%s abcdef # O formato especificou apenas um parâmetro, mas os parâmetros em excesso ainda serão exibidos conforme o formato, format-A string foi reutilizada printf %%s abc def printf "%%s\n" abc def printf "%%s %%s %%s %%s %%s %%s %%s %%s %%s %%s\n" a b c d e f g h i j # Se não houver arguments, %s será substituído por NULL, %d por 0 printf "%%s %%d %%n"
Executar o script, o resultado será como mostrado a seguir:
1 abc 1 abc abcdefabcdefabc def a b c d e f g h i j e 0
Série | Descrição |
---|---|
\a | Caractere de Aviso, geralmente o caractere ASCII BEL |
\b | Retorno |
\c | Suprimir (não exibir) qualquer caractere de nova linha no final do resultado de saída (apenas válido em strings de parâmetros controladas pelo sinalizador de formato %b), e todos os caracteres restantes nos parâmetros, todos os parâmetros seguintes e todos os caracteres restantes na string de formato são ignorados |
\f | Página de Formatar (formfeed) |
\n | Quebra de Linha |
\r | Retorno de Carro (Carriage return) |
\t | Tabulação Horizontal |
\v | Tabulação Vertical |
\\ | um caractere literal de backslash |
\ddd | representa1até3caracteres de valor octal de ponto. Valido apenas em strings de formato |
\0ddd | representa1até3caracteres de valor octal de ponto |
$ printf "uma string, sem processamento:<%s>\n" "A\nB" uma string, sem processamento:<A\nB> $ printf "uma string, sem processamento:<%b>\n" "A\nB" uma string, sem processamento:<A B> $ printf "pt.oldtoolbag.com \a" pt.oldtoolbag.com $ # sem quebra de linha