Casa Estudar Como usar o comando Bash printf no Linux

Como usar o comando Bash printf no Linux

por Frank
Publicados: Última atualização em

Introdução

O comando Bash printf oferece mais flexibilidade e opções de formatação do que o comando echo ao gravar em uma janela de terminal Linux. Até as peculiaridades do printf podem ser benéficas.

É um dos aspectos mais fundamentais de trabalhar com software. Você lê o que o aplicativo escreveu na tela. Mesmo com o hábito derivado do Unix e suportado pelo Linux de programas de linha de comando serem o mais breves possível, muitos aplicativos só gravam no terminal quando algo dá errado. Um básico de programação crucial é informar ao usuário o que está ocorrendo, vai acontecer ou ocorreu recentemente.

O comando echo no shell Bash pode gravar texto na tela do terminal. Você pode usá-lo em scripts ou na linha de comando, e pode manipular variáveis e mostrar seus valores se estiverem contidos na string. Então, qual é o ponto de printf? A escrita de texto não é algo que o echo cuida? Printf, por outro lado, fornece mais do que apenas a capacidade de escrever strings em janelas de terminal. Ele oferece muita versatilidade quando se trata de formatar a saída e tem alguns truques adicionais na manga.

O comando printf no Bash é semelhante à função printf em C, porém há várias mudanças. Você precisará estar ciente das mudanças se estiver familiarizado com C.

Criando Strings Simples

Vejamos as diferenças entre echo e printf quando se trata de escrever strings no terminal.

eco aqui estão algumas palavras
printf aqui estão algumas palavras

Usando echo e printf com palavras sem aspas

Enquanto echo imprime todas as palavras, printf simplesmente publica a primeira. Além disso, printf não imprime uma nova linha. A saída é bem no meio do prompt de comando. Mas, antes de tudo, todas as palavras devem ser citadas para que printf atue sobre elas.

eco aqui estão algumas palavras
printf "aqui estão algumas palavras"

Usando echo e printf com palavras entre aspas

Isso é um passo à frente. Imprimimos todas as palavras, mas ainda estamos esperando por uma nova linha. Isso porque printf só imprime uma nova linha se você solicitar uma especificamente. Isso pode parecer inconveniente, mas permite que você escolha se deseja ou não adicionar um. Você deve adicionar “n” em sua string para printf emitir uma nova linha. A sequência de escape “newline” é usada aqui.

eco aqui estão algumas palavras
printf "aqui estão algumas palavrasn"

Usando echo e printf com palavras entre aspas e o caractere de nova linha

Você usará uma nova linha algumas vezes e outras não. Neste exemplo, um comando printf utiliza uma nova linha enquanto o outro não.

printf "Como fazer" && printf "Geekn"

Usando dois printfs para criar uma única linha de texto

Como o primeiro printf não imprime uma nova linha, a saída do segundo printf é colocada na mesma linha de “How-To”. Para imprimir uma nova linha, o segundo printf usa n. O prompt de comando agora será exibido na linha abaixo do texto impresso.

Personagens que escaparam da captura

Aqui estão alguns caracteres adicionais que podem ser usados como escapes. Você já viu como “n” funciona.

n: Muda para uma nova linha.
r: Este comando imprime um retorno de carro. O cursor de saída é retornado ao início da linha atual.
t: Este comando imprime um caractere de tabulação.
v: adiciona um espaço de tabulação vertical à página.
\: Um caractere de barra invertida é impresso.
“: Exibe aspas.
b: Exibe o caractere de retrocesso.

O caractere de escape de retorno de carro é usado para retornar o cursor ao início da linha atual.

printf "O mel é a raiz de todos os malesrMoneyn"

Usando o caractere de retorno de carro para voltar ao início da linha

O comando printf lê da esquerda para a direita. Até que printf detecte o caractere de escape “r”, a string é escrita como texto normal. O cursor de saída é reposicionado no início da linha atual.

Com a letra imediatamente abaixo do caractere “r”, o processamento da string continua. O restante faz com que printf imprima “Money”, que substitui a frase “Honey”.

A barra invertida “” sinaliza sequências de escape, enquanto as aspas “”” são usadas para citar strings. Se você deseja imprimir esses caracteres, use uma barra invertida para escapar deles. Isso instrui printf que eles devem ser tratados como caracteres literais.

printf "Esta é uma tTab, esta é uma aspa ", e esta \ é uma barra invertida"

Caracteres de escape para que sejam tratados literalmente

Variáveis em ação

O uso de variáveis com printf é bastante semelhante ao uso de variáveis com echo. Para incluir uma variável, como esta variável de ambiente, use o cifrão “$” normalmente antes dele.

printf "Diretório inicial: $HOMEn"

Usando printf com uma variável de ambiente

Formatação de String

As strings de formato são strings que especificam o formato de saída. Você fornece o texto da string de formato e valores adicionais para trabalhar como argumentos.

Texto, sequências de escape e especificadores de formato podem ser incluídos na string de formato.

Os especificadores de formato do Printf informam que tipo de argumento ele deve aceitar, como strings, números ou caracteres.

Os especificadores de formato mais frequentes são mostrados abaixo. Um símbolo de porcentagem ” por cento ” precede todos eles. Você pode imprimir um sinal de porcentagem combinando dois sinais de porcentagem ” por cento por cento “.

  • %s: Imprime uma string.
  • %c: Imprime um único caractere.
  • %d: Imprime um inteiro.
  • %f: imprime um número de ponto flutuante.
  • %u: Imprime um inteiro sem sinal.
  • %o: Imprime um valor em octal.
  • %x: Prints a value in hexadecimal, em minúsculas.
  • %X: Imprime um valor em hexadecimal, em maiúsculas.
  • %e: Imprime um número de ponto flutuante em notação científica, em letras minúsculas.
  • %E: Imprime um número de ponto flutuante em notação científica, em letras maiúsculas.
  • %%: Prints a percent “%” symbol.
printf "Como fazer %sn" "Geek"
printf "%s%s %sn" "Como" "-Para" "Geek"

Mostrando printf aceitando argumentos "muitos"

A string de formato do primeiro comando contém algum conteúdo próprio. A string “Geek” é enviada para printf como um argumento. O especificador de formato “%s” corresponde a ele e o imprime. Entre a string de formato e a string do argumento, há apenas um espaço. Em C, uma vírgula seria necessária para separá-los, mas com a versão Bash de printf, um espaço é suficiente.

Apenas os especificadores de formato e a sequência de escape de nova linha são incluídos na segunda string de formato. Cada um dos especificadores de formato “%s” consome os três parâmetros de string por sua vez. Novamente, em C, uma vírgula é necessária entre cada parâmetro, mas a função printf do Bash nos permite ignorar esse requisito.

Basta usar o especificador de formato adequado para gerar vários tipos de argumentos. Aqui está uma função simples de conversão de números baseada em printf. Em notação decimal, octal e hexadecimal, imprimiremos o número 15.

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

usando printf para imprimir valores numéricos em diferentes notações de base

Vamos reduzi-lo um pouco para tornar o exemplo menos confuso.

printf "Hex: %xn" 15

Imprimindo um valor hexadecimal

A maioria de nós está acostumada a ver números hexadecimais renderizados em maiúsculas e com valores menores que 0x10 precedidos por um zero à esquerda. Podemos fazer isso colocando um especificador de largura entre o sinal de porcentagem “%” e o caractere “X” e utilizando o especificador de formato hexadecimal maiúsculo “% X”.

Isso especifica o tamanho do campo no qual o argumento deve ser impresso para printf. Espaços foram adicionados ao campo. Números de dois dígitos seriam apresentados sem qualquer preenchimento neste estilo.

printf "Hex: %2Xn" 15

imprimindo um valor hexadecimal em maiúsculas em um campo de 2 caracteres de largura

Agora temos um valor maiúsculo com um espaço à esquerda escrito nele. Colocando um zero na frente dos dois, podemos ter printf preenchendo o campo com zeros em vez de espaços:

printf "Hex: %02Xn" 15

imprimindo um valor hexadecimal em maiúsculas em um campo de 2 caracteres preenchido com zeros

O especificador de precisão permite especificar quantos pontos decimais devem ser incluídos na saída.

printf "Floating point: %08.3fn" 9.243546

Usando modificadores de largura e precisão com um número de ponto flutuante

Isso facilita muito a criação de tabelas de resultados com saída perfeitamente alinhada. Este comando também exibe outra das idiossincrasias do Bash printf. Se houver mais argumentos do que especificadores de formato, os argumentos serão alimentados na string de formato em lotes até que todos sejam usados. A quantidade de especificadores de formato na string de formato determina o tamanho do lote que é processado em um determinado momento. Os argumentos extras enviados para a função printf em C são ignorados.

printf "Float: %8.3fn" 9.243546 23.665 8.0021

Usando modificadores de largura e precisão para criar uma tabela organizada

Strings também podem empregar os especificadores de largura e precisão. As strings são impressas em um campo de 10 caracteres usando este comando.

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

Usando o modificador de largura com strings

By default, values are right-justified in their fields. To left-justify them, use a minus sign “-” immediately behind the percent “%” sign.

printf "%-10s %d" "casacos" 7 "sapatos" 22 "guarda-chuvas" 3

Usando um especificador de largura justificado à esquerda com strings

O especificador de precisão permite escolher o número máximo de caracteres que serão impressos. As letras de dois pontos “:” são usadas para indicar as limitações do campo de largura. Não da forma como o termo “guarda-chuvas” é abreviado.

printf ":%10.6s:n" "coats" "shoes" "Umbrellas"
printf ":%-10.6s:n" "casacos" "sapatos" "guarda-chuvas"

Usando o modificador de precisão para limitar o número de caracteres que são impressos de uma string

Mesmo como argumento, o especificador de largura pode ser usado. Em vez de um especificador numérico, use um asterisco “*” e forneça a largura como uma entrada inteira.

printf "%*sn" 20 "Mais à direita" 12 "Médio" 5 "mais à esquerda"

Passando o especificador de largura como um argumento para printf

Outras curiosidades e truques

Os especificadores de formato na string de formato operarão com valores do tipo apropriado, sejam eles fornecidos como argumentos comuns na linha de comando ou criados como resultado de uma expressão.

Isso exibe o resultado da adição de dois números:

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

Imprimindo a soma de dois números

O número de pastas no diretório de trabalho atual é impresso por este comando:

printf "Existem diretórios %dn" $(ls -d */ | wc -l)

Contando diretórios com printf

O comando printf imprime uma string que foi retornada de outro programa.

printf "Usuário atual: %sn" $(whoami)

Imprimindo a saída de outro comando

Se o especificador de formato de string “percent s” não for fornecido com um argumento, printf retornará null.

printf "Um: %s dois: %sn" "Alfa"

Como printf lida com argumentos de string ausentes

Se um valor numérico for fornecido acidentalmente para o especificador de formato de string ” % s”, ele o imprime como uma string e não reclama. Se você fizer isso usando o C printf, terá muitos problemas. Seu software quase certamente vai falhar. O printf do Bash, por outro lado, não parece se importar.

printf "Um: %s dois: %sn" "Alfa" 777

Como printf aceita silenciosamente inteiros como valores de string

Se o especificador de formato inteiro “% d” não receber um argumento, zero será impresso.

printf "Inteiro: %dn"

Como printf lida com argumentos inteiros ausentes

O Bash exibirá uma mensagem de erro e printf imprimirá zero se o especificador de formato inteiro ” % d” obtiver uma string de entrada por acidente.

printf "Inteiro: %dn" "Sete"

Como printf trata strings que são fornecidas em vez de argumentos inteiros

Símbolos estranhos podem ser criados inserindo seu número Unicode, também conhecido como “ponto de código”. A letra “u” é usada para escapar de certos caracteres, seguida de seu valor Unicode.

printf "O símbolo do Euro: u20ACn"

Imprimindo um valor Unicode com escape

Para acomodar sequências de escape em strings de argumentos, use o especificador de formato ” % b” em vez do especificador de formato de string ” % s” na string de formato.

printf "%s" "u20ACn"
printf "%b" "u20ACn"

Usando o especificador de formato %b para lidar com sequências de escape em argumentos de string

O comando printf inicial não reconhece a sequência de escape de nova linha e não processa o valor Unicode. O especificador de formato “% b” é usado no segundo comando printf. O caractere Unicode é tratado adequadamente e uma nova linha é exibida.

Cavalos para cursos

Você pode precisar apenas ecoar algum texto na janela do terminal ocasionalmente. No entanto, printf é a ferramenta ideal para a tarefa quando você precisa aplicar algum posicionamento e formatação.

printf "%b" "Tha-" "tha-" "tha-" "isso é tudo pessoal.n"

você pode gostar

Navhow é dedicado a ensinar as pessoas de todo o mundo como fazer qualquer coisa.

 

Se inscrever

O melhor boletim informativo de instruções em qualquer lugar

©2022 Navhow, Todos os direitos reservados