Comando Linux printf
Em sistemas operacionais do tipo Unix, o comando printf insere argumentos em uma sequência de texto definida pelo usuário , criando saída formatada.
Este documento cobre a versão GNU / Linux do printf .
Descrição
printf imprime uma string formatada na saída padrão. Suas raízes estão na linguagem de programação C , que usa uma função com o mesmo nome. É uma maneira útil de produzir resultados precisamente formatados a partir de argumentos numéricos ou textuais.
Sintaxe
printf FORMAT [ ARGUMENTO ] ...
OPÇÃO printf
Opções
FORMATO | FORMAT controla a saída e define a maneira que os ARGUMENTOS serão expressos na saída. Veja a seção Formato abaixo. |
ARGUMENTO | Cada ARGUMENTO será inserido na saída formatada de acordo com a definição de FORMAT . |
–Socorro | Exiba uma mensagem de ajuda e saia. |
–versão | Exiba informações da versão e saia. |
Formato
A sequência FORMAT contém três tipos de objetos:
- caracteres comuns , que são copiados literalmente para a saída.
- seqüências de caracteres interpretadas, que são escapadas com uma barra invertida (” \ “).
- especificações de conversão, que definem a maneira pela qual ARGUMENT s será expresso como parte da saída.
Aqui está um exemplo rápido que usa esses três tipos de objetos:
printf "Meu nome é \"% s \ ". \ nÉ um prazer conhecê-lo." "John"
Este comando produz a saída:
Meu nome é John". É um prazer conhecer você.
Aqui, FORMAT é colocado entre aspas duplas ( “ ). Há uma especificação de conversão: % s , que interpreta o argumento ” John “ como uma string e o insere na saída. Há três seqüências de caracteres de escape: duas ocorrências de \ “ e uma ocorrência de \ n . A sequência \ “é traduzida como aspas duplas literais; é escapada com uma barra invertida para que printf saiba tratá-la como um caractere literal, e não como o final da string FORMAT . \ N é a sequência de um caractere de nova linha , e diz printf para iniciar uma nova linha e continuar a saída a partir daí.
O poder do printf reside no fato de que, para qualquer sequência FORMAT , os ARGUMENT s podem ser alterados para afetar a saída. Por exemplo, a saída do comando no exemplo acima pode ser alterada apenas alterando o argumento “John”. Se usado em um script , esse argumento pode ser definido como uma variável . Por exemplo, o comando
printf "Olá, sou% s. \ n" $ LOGNAME
… inserirá o valor da variável de ambiente $ LOGNAME , que é o nome de usuário de quem executou o comando.
Especificações de conversão
Cada especificação de conversão começa com um % e termina com um caractere de conversão. Entre o % e o caractere de conversão, pode haver, em ordem:
– | Um sinal de menos. Isso diz ao printf para ajustar à esquerda a conversão do argumento. |
número | Um número inteiroS que especifica a largura do campo; printf imprimirá uma conversão de ARGUMENT em um campo com pelo menos um número de caracteres. Se necessário, será preenchido à esquerda (ou à direita, se for necessário ajuste à esquerda) para compensar a largura do campo. |
. | Um período que separa a largura do campo da precisão. |
número | Um número inteiro, a precisão, que especifica o número máximo de caracteres a serem impressos a partir de uma string, ou o número de dígitos após o ponto decimal de um valor de ponto flutuante ou o número mínimo de dígitos para um número inteiro. |
h ou l | Eles diferenciam um inteiro curto e um longo, respectivamente, e geralmente são necessários apenas para a programação de computadores. |
Os próprios caracteres de conversão, que informam a printf que tipo de argumento esperar, são os seguintes:
caractere de conversão | tipo de argumento |
---|---|
d , i | Um número inteiro, expresso como um número decimal. |
o | Um número inteiro, expresso como um número octal não assinado . |
x , x | Um número inteiro, expresso como um número hexadecimal não assinado |
você | Um número inteiro, expresso como um número decimal não assinado. |
c | Um número inteiro, expresso como um caractere. O número inteiro corresponde ao código ASCII do caractere . |
s | Uma linha. |
f | Um número de ponto flutuante, com uma precisão padrão de 6. |
e , E | Um número de ponto flutuante expresso em notação científica, com uma precisão padrão de 6. |
p | Um ponteiro de endereço de memória. |
% | Sem conversão; um sinal de porcentagem literal (” % “) é impresso. |
Uma largura ou precisão pode ser representada com um asterisco (” * “); Nesse caso, o asterisco lê um argumento, que deve ser um número inteiro, e usa esse valor. Por exemplo,
printf "%. * s" 5 "abcdefg"
… produz a seguinte saída:
abcde
A tabela a seguir representa a maneira que printf produziria seu ARGUMENT , ” computerhope “, usando várias seqüências de caracteres FORMAT . Cada sequência é colocada entre aspas, para que seja mais fácil ver a extensão exata de cada uma:
FORMAT string | ARGUMENT string | string de saída |
---|---|---|
“% s” | “computerhope” | "computerhope" |
“% 8s” | “computerhope” | "computerhope" |
“% .8s” | “computerhope” | "computador" |
“% -8s” | “computerhope” | "computerhope" |
“% -15s” | “computerhope” | "computerhope" |
“% 15,8s” | “computerhope” | "computador" |
“% -15,8” | “computerhope” | "computador" |
“% -15,2” | “computerhope” | "co" |
Observe que printf requer que o número de cadeias de conversão corresponda ao número de ARGUMENT s; ele os mapeia individualmente e espera encontrar exatamente um ARGUMENT para cada sequência de conversão. A única exceção é uma string de conversão que usa um asterisco; essas cadeias requerem dois argumentos cada.
As seqüências de conversão são sempre interpretadas da esquerda para a direita. Por exemplo, o seguinte comando printf :
printf "% d mais% 5f% s%. * f." 5 5,05 "iguais" 3 10,05
… produz a seguinte saída:
5 mais 5,050000 é igual a 10,050.
Sequências de caracteres com escape interpretados
As seguintes seqüências de caracteres são interpretadas como caracteres especiais por printf :
\ “ | imprime aspas duplas ( “ ) |
\\ | imprime uma barra invertida ( \ ) |
\uma | emite um alerta (toca uma campainha) |
\ b | imprime um backspace |
\ c | instrui o printf a não produzir mais saída |
\ e | imprime um caractere de escape (código ASCII 27) |
\ f | imprime um feed de formulário |
\ n | imprime uma nova linha |
\ r | imprime um retorno de carro |
\ t | imprime uma guia horizontal |
\ v | imprime uma guia vertical |
\ NNN | imprime um byte com valor octal NNN (1 a 3 dígitos) |
\ x HH | imprime um byte com valor hexadecimal HH (1 a 2 dígitos) |
\ u HHHH | imprime o caractere unicode com valor hexadecimal HHHH (4 dígitos) |
\ U HHHHHHHH | imprime o caractere unicode com valor hexadecimal HHHHHHHH (8 dígitos) |
% b | imprime ARGUMENT como uma string com escapes ” \ ” interpretados conforme listado acima, com a exceção de que escapes octais assumem o formato \ 0 ou \ 0 NN |
Citando no Shell
Tenha cuidado com a maneira como seu shell interpreta as seqüências de caracteres citadas. Se o seu shell não estiver interpretando corretamente sua cadeia de caracteres entre aspas, tente usar aspas simples em vez de aspas duplas.
Exemplos
printf 'olá \ nworld \ n!'
Imprime a seguinte saída:
Olá mundo !
printf "% b" 'olá \ nworld \ n!'
Imprime a mesma saída que o exemplo acima.
printf "Sua pasta pessoal é% s. \ n" $ HOME
Imprime uma string informando o local do diretório inicial .
Comandos relacionados
awk – Intérprete para a linguagem de programação de processamento de texto AWK.
bc – Uma calculadora.
eco – Texto de saída.