Confusão com o comando printf?

10

Eu tenho que imprimir as três linhas seguintes em um comando de impressão sem usar o comando echo. Então eu escolhi o comando printf.Aqui estão as três linhas:

  Different characters can be represented and supported 
  in the print command, for example: 
  x-y, X+Y, –, +, <, >, %, $, #, &.

O que eu fiz até agora é:

   printf "
   Different characters can be represented and supported 
   in the print command, for example: 
   x-y, X+Y, –, +, <, >, %, $, #, &.
   "

Mas eu tenho erro de bash para a terceira linha ','.

Então alguém vai me esclarecer.

    
por Narwen 15.11.2013 / 17:24

6 respostas

10

Melhor usar:

printf "Different characters can be represented and supported\n\
in the print command, for example:\n\
x-y, X+Y, –, +, <, >, %%, $, #, &.\n"

Você obtém esse erro, como outros disseram aqui, por causa do caractere % que é especial e deve ser escapado.

Veja man 1 printf para mais informações.

    
por Radu Rădeanu 15.11.2013 / 17:39
12

% é um caractere especial em printf . Isso é o que está causando o erro. Você precisa escapar como %% .

$ também pode ser substituído quando estiver entre aspas duplas pelo shell externo, então você deve escapar disso ( $ ). Normalmente, é mais fácil usar aspas simples.

    
por Oli 15.11.2013 / 17:27
9

o % é especial para printf: é o caracter principal em especificadores de formato. Se você quiser um percentual literal, use %%

    
por glenn jackman 15.11.2013 / 17:28
9

É um pouco surpreendente ver que quando você não tem permissão para usar o comando echo que você escolheu para usar o comando printf .

Por que não cat ?

#!/bin/bash

cat<<'EOF'
Different characters can be represented and supported
in the print command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
EOF
    
por thom 15.11.2013 / 20:32
4

printf é uma impressão formatada que usa uma string de formato como seu primeiro parâmetro. O restante dos parâmetros é usado na string de formatação. As três coisas a lembrar ao usar printf são:

  1. Embora muitos idiomas tenham printf instruções / comandos / funções, todos eles diferem um pouco, portanto, sempre verifique os detalhes na documentação específica da linguagem (C, bash, php, perl, etc.),

  2. Você nunca deve usar informações fornecidas pelo usuário na string de formatação. Esta é sempre uma falha de segurança. Se você quiser exibir uma string fornecida pelo usuário, use uma string de formato como "%s" .

  3. Tanto a barra invertida ( \ ) quanto o sinal de porcentagem ( % ) são caracteres de escape que alteram o significado dos seguintes caracteres se você quiser que um caractere de escape apareça em sua saída. deve ser escapado ou puxado de outro parâmetro. O cifrão ( $ ) não é especial para o printf, mas é especial para o shell, portanto, tome cuidado com suas citações.

printf é ótimo para formatar números. veja as páginas do manual para detalhes

    
por hildred 15.11.2013 / 23:16
1

Como outros já mencionaram, o símbolo % é especial para printf .

Se você quiser apenas imprimir uma string como está, dê a printf %s como primeiro argumento e a string entre aspas simples como o segundo argumento:

printf %s '
Different characters can be represented and supported 
in the printf command, for example: 
x-y, X+Y, –, +, <, >, %, $, #, &.
'

Usar aspas simples, em vez de aspas duplas, interrompe o shell de interpolar símbolos como $ .

    
por Flimm 20.11.2013 / 10:05