Я должен напечатать следующие три строки в одной команде печати без использования команды 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 для третьей строки ','.
Так кто-нибудь просветит меня.
command-line
bash
Narwen
источник
источник
print
командойprintf
команда.Ответы:
Лучше использовать:
Вы получаете эту ошибку, как уже говорили другие, из-за
%
характера, который является особенным и должен быть экранирован.Смотрите
man 1 printf
для получения дополнительной информации.источник
/your_string_to_search
и нажмите клавишу ввода.printf
том, что%
характер и что он делает!%
это специальный символ вprintf
. Вот что вызывает ошибку. Вы должны избежать этого как%%
.$
может также быть заменен в двойных кавычках внешней оболочкой, поэтому вы должны избегать этого (\$
). Обычно проще использовать одинарные кавычки.источник
$variable
заменяется на оболочку, а не наprintf
. Если вы окружите свою строку одинарными, а не двойными кавычками,$
оболочка не будет интерполироваться и будет напрямую переданаprintf
.$
также является специальным, когда за ним следует{
или специальный символ параметра , или одна или несколько цифр . Однако основная идея того, что вы говорите, верна.%специально для Printf: это ведущий символ в спецификаторов формата. Если вы хотите буквальный процент, используйте
%%
источник
Немного удивительно видеть, что, когда вам не разрешено использовать
echo
команду, вы выбралиprintf
вместо нее использовать команду.Почему нет
cat
?источник
$foo
в тексте, используйтеcat <<'EOF'
вместоcat <<EOF
.printf
форматированная печать, которая принимает строку формата в качестве первого параметра. Остальные параметры используются в строке формата. Три вещи, которые следует помнить при использованииprintf
:Хотя многие языки имеют
printf
операторы / команды / функции, все они немного отличаются, поэтому всегда проверяйте детали в документации по конкретному языку (C, bash, php, perl и т. Д.),Вы никогда не должны использовать предоставленную пользователем информацию в строке формата. Это всегда недостаток безопасности. Если вы хотите отобразить предоставленную пользователем строку, используйте строку формата, например
"%s"
.И обратная косая черта (
\
), и знак процента (%
) являются escape-символами, которые изменяют значение следующих символов, если вы хотите, чтобы в вашем выводе появлялся escape-символ, он должен быть экранирован или извлечен из другого параметра. Знак доллара ($
) не является особенным для printf, но особенным для оболочки, поэтому будьте осторожны с кавычками.printf
отлично подходит для форматирования чисел. посмотрите на страницы руководства для деталейисточник
Как уже упоминали другие,
%
символ специально дляprintf
.Если вы просто хотите распечатать строку как есть, укажите
printf
%s
в качестве первого аргумента строку, а в качестве второго аргумента строку, заключенную в одинарные кавычки:Использование одинарных кавычек вместо двойных кавычек останавливает оболочку от интерполяции символов вроде
$
.источник