Я должен напечатать следующие три строки в одной команде печати без использования команды 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. Вот что вызывает ошибку. Вам нужно избегать его как %%.
$ также может быть заменено, если в двойных кавычках внешней оболочки, поэтому вам следует избегать этого (\$). Обычно просто использовать одиночные кавычки.
% специально для 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 отлично подходит для форматирования чисел. посмотрите страницы руководства для деталей
Как отмечали другие, символ % является особым для printf.
Если вы просто хотите распечатать строку как есть, дайте printf %s как первый аргумент и строка, заключенная в одинарные кавычки, в качестве второго аргумента:
printf %s '
Different characters can be represented and supported
in the printf command, for example:
x-y, X+Y, –, +, <, >, %, $, #, &.
'
Использование одинарных кавычек вместо двойных кавычек останавливает оболочку от интерполяции символов, таких как $.