Índice
ToggleIntroduçã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
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"
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"
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"
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"
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"
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"
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"
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
Vamos reduzi-lo um pouco para tornar o exemplo menos confuso.
printf "Hex: %xn" 15
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
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
O especificador de precisão permite especificar quantos pontos decimais devem ser incluídos na saída.
printf "Floating point: %08.3fn" 9.243546
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
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
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
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"
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"
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))
O número de pastas no diretório de trabalho atual é impresso por este comando:
printf "Existem diretórios %dn" $(ls -d */ | wc -l)
O comando printf imprime uma string que foi retornada de outro programa.
printf "Usuário atual: %sn" $(whoami)
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"
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
Se o especificador de formato inteiro “% d” não receber um argumento, zero será impresso.
printf "Inteiro: %dn"
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"
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"
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"
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"
- Como excluir dados de uma unidade do Windows 10 ou Windows 11
- Como enviar iMessages de um endereço de e-mail em vez de um número de telefone
- Como instalar o Kali Linux em qualquer dispositivo Android sem root
- Como calcular a média no Planilhas Google
- Como desativar o status ativo do Facebook
- Como editar variáveis de ambiente do Windows 10 ou 11