Путаница с командой 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
являются:
Хотя многие языки имеют
printf
операторы / команды / функции, они все немного различаются, поэтому всегда проверяйте детали в документации, специфичной для языка (C, bash, php, perl и т. д.),Вы никогда не должны использовать предоставленную пользователем информацию в строке формата. Это всегда недостаток безопасности. Если вы хотите отобразить предоставленную пользователем строку, используйте строку формата, например
"%s"
,Как обратный слеш (
\
) и знак процента (%
) являются 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, –, +, <, >, %, $, #, &.
'
Использование одинарных кавычек вместо двойных кавычек останавливает оболочку от интерполяции таких символов, как $
,