Я должен напечатать следующие три строки в одной команде печати без использования команды 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 для третьей строки ', ».
Так кто-нибудь просветит меня.
Лучше использовать:
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
. Вот что вызывает ошибку. Вы должны избежать этого как %%
.
$
также может быть заменено внешней оболочкой в двойных кавычках, поэтому вам следует избегать этого (\$
). Обычно проще использовать одинарные кавычки.
/etc/hosts
. Никогда не выяснял, почему они добавляют его, но...
– muru
14 May 2015 в 04:48
% kbd> специально для 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
операторы / команды / функции, они все немного отличаются, поэтому всегда проверяйте детали в документации по конкретному языку (C, bash, php, perl и т. Д.),
Вы никогда не должны использовать предоставленную пользователем информацию в строке формата. Это всегда недостаток безопасности. Если вы хотите отобразить предоставленную пользователем строку, используйте строку формата, например "%s"
.
И обратная косая черта (\
), и знак процента (%
) являются escape-символами, которые изменяют значение следующих символов, если вы хотите, чтобы escape-символ появлялся в ваших выходных данных, он должен быть экранирован или извлечен из другого параметра. Знак доллара ($
) не является особенным для printf, но особенным для оболочки, поэтому будьте осторожны с вашими цитатами.
printf
отлично подходит для форматирования чисел. посмотрите на страницы man для деталей
Как уже упоминалось, символ %
специально для printf
.
Если вы просто хотите распечатать строку как есть, укажите printf
%s
в качестве первого аргумента, а строку, заключенную в одинарные кавычки, в качестве второго аргумента:
printf %s '
Different characters can be represented and supported
in the printf command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
'
Использование одинарных кавычек вместо двойных кавычек мешает оболочке интерполировать символы, такие как $
.
/etc/hosts
, что он должен измениться? – chili555 14 May 2015 в 00:51