Путаница с командой printf?

Я должен напечатать следующие три строки в одной команде печати без использования команды echo. Поэтому я выбрал команду printf. Вот три строки:

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

Что я сделал до сих пор:

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

Но я получил ошибку bash для третьей строки ','.

Так кто-нибудь просветит меня.

6 ответов

Решение

Лучше использовать:

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

Вы получаете эту ошибку, как другие уже сказали здесь, из-за % характер, который является особенным и должен быть экранирован.

Увидеть man 1 printf для получения дополнительной информации.

% это специальный символ в printf, Вот что вызывает ошибку. Вы должны избежать этого как %%,

$ может также быть заменен, когда в двойных кавычках внешняя оболочка, так что вы должны избежать этого (\$). Обычно проще использовать одинарные кавычки.

Немного удивительно видеть, что когда вам не разрешено использовать echo Команда, которую вы решили использовать printf команда вместо

Почему бы и нет cat?

#!/bin/bash

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

% специально для printf: это ведущий символ в спецификаторах формата. Если вы хотите буквальный процент, используйте %%

printf является отформатированной печатью, которая принимает строку формата в качестве первого параметра. Остальные параметры используются в строке формата. Три вещи, которые следует помнить при использовании printf являются:

  1. Хотя многие языки имеют printf операторы / команды / функции, они все немного различаются, поэтому всегда проверяйте детали в документации, специфичной для языка (C, bash, php, perl и т. д.),

  2. Вы никогда не должны использовать предоставленную пользователем информацию в строке формата. Это всегда недостаток безопасности. Если вы хотите отобразить предоставленную пользователем строку, используйте строку формата, например "%s",

  3. Как обратный слеш (\) и знак процента (%) являются escape-символами, которые изменяют значение следующих символов, если вы хотите, чтобы escape-символ появлялся в ваших выходных данных, он должен быть экранирован или извлечен из другого параметра. Знак доллара ($) не является особенным для printf, но особенным для оболочки, поэтому будьте осторожны с вашими цитатами.

printf отлично подходит для форматирования чисел. посмотрите на страницы руководства для деталей

Как уже упоминалось, % символ специально для printf,

Если вы просто хотите распечатать строку как есть, дайте printf%s в качестве первого аргумента, а строка заключена в одинарные кавычки в качестве второго аргумента:

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

Использование одинарных кавычек вместо двойных кавычек останавливает оболочку от интерполяции таких символов, как $,

Другие вопросы по тегам