Путаница с командой 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 для третьей строки ', ».

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

13
задан 16 November 2013 в 16:31

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 для получения дополнительной информации.

0
ответ дан 16 November 2013 в 16:31
  • 1
    Что находится в /etc/hosts, что он должен измениться? – chili555 14 May 2015 в 00:51

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

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

0
ответ дан 16 November 2013 в 16:31
  • 1
    @chili555 некоторые люди имеют прямой IP-> имя узла, отображающееся для текущего сервера также в /etc/hosts. Никогда не выяснял, почему они добавляют его, но... – muru 14 May 2015 в 04:48

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

0
ответ дан 16 November 2013 в 16:31
  • 1
    @muru некоторое системное программное обеспечение, которое автоматически обнаруживает взгляды FQDN в/etc/hosts, чтобы видеть, там ли такая запись. Например, если это посмотрит в/etc/hostname и не найдет полный FQDN, то это будет искать запись в/etc/hosts, который относится к соответствующему сетевому интерфейсу. Является ли это хорошей идеей I can' t комментарий. – thomasrutter 14 May 2015 в 08:30

Немного удивительно видеть, что, когда вам не разрешено использовать команду 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
0
ответ дан 16 November 2013 в 16:31

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

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

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

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

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

0
ответ дан 16 November 2013 в 16:31

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

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

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

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

0
ответ дан 16 November 2013 в 16:31
  • 1
    Да, я знаю, я отредактировал свой вопрос лучше выразить то, что я имел в виду. –  13 May 2015 в 23:22

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

Похожие вопросы: