Eu tenho que imprimir as três linhas a seguir 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 recebi o erro bash para a terceira linha ','.
Então alguém vai me esclarecer.
command-line
bash
Narwen
fonte
fonte
print
comando oprintf
comando.Respostas:
Melhor usar:
Você recebe esse erro, como outros já disseram aqui, por causa de um
%
personagem especial e que precisa ser escapado.Veja
man 1 printf
para mais informações.fonte
/your_string_to_search
e pressione enter.printf
é esse%
personagem e o que ele faz!%
é um caractere especial emprintf
. É isso que está causando o erro. Você precisa escapar como%%
.$
também pode ser substituído quando estiver entre aspas duplas pelo shell externo; portanto, você deve escapar disso (\$
). Geralmente, é mais fácil usar aspas simples.fonte
$variable
é substituído pelo shell, não porprintf
. Se você envolver sua string entre aspas simples, em vez de aspas duplas,$
ela não será interpolada pelo shell e será passada diretamente paraprintf
.$
também é especial quando seguido por{
ou por um símbolo de parâmetro especial ou um ou mais dígitos . A idéia básica do que você está dizendo está correta, no entanto.o %é especial para printf: é o principal caractere nos especificadores de formato. Se você quiser uma porcentagem literal, use
%%
fonte
É um pouco surpreendente ver que, quando você não tem permissão para usar o
echo
comando, optou por usá-loprintf
.Por que não
cat
?fonte
$foo
no texto, use emcat <<'EOF'
vez decat <<EOF
.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 formato. As três coisas a serem lembradas ao usarprintf
são:Embora muitos idiomas tenham
printf
instruções / comandos / funções, todos diferem um pouco; portanto, sempre verifique detalhes na documentação específica do idioma (C, bash, php, perl etc.),Você nunca deve usar as informações fornecidas pelo usuário na string de formato. Esta é sempre uma falha de segurança. Se você deseja exibir uma string fornecida pelo usuário, use uma string de formato como
"%s"
.A barra invertida (
\
) e o sinal de porcentagem (%
) são caracteres de escape que alteram o significado dos seguintes caracteres, se você deseja que um caractere de escape apareça na saída, ele deve ser escapado ou extraído de outro parâmetro. O sinal de cifrão ($
) não é especial para printf, mas é especial para o shell, portanto, tenha cuidado com suas cotações.printf
é ótimo para formatar números. veja as páginas do manual para obter detalhesfonte
Como outros já mencionaram, o
%
símbolo é especial paraprintf
.Se você quiser imprimir apenas uma string, dê a
printf
%s
como primeiro argumento e a string entre aspas simples como segundo argumento:Usar aspas simples em vez de aspas duplas impede o shell de interpolar símbolos como
$
.fonte