13

Я сбрасываю строку с hexdump как этот 2031 3334 2e30 0a32 2032 3331 302e 000a . Ясно, что 0x0a - символ новой строки, однако, когда я пытаюсь вывести эту строку, я всегда 1 430.2 2 13.0 - новая строка заменяется пробелом, даже я использую флаг -e .

В чем может быть проблема? Хвосты \0 портят вывод? Есть ли альтернатива для печати 0x0a новой строки?

Спасибо и всего наилучшего.

3 ответа3

23

Символ новой строки с командой echo - "\n". Возьмем следующий пример:

echo -e "This is line 1\nThis is line 2"

Приведет к выводу

This is line 1
This is line 2

«-E» параметр важен здесь.

3

POSIX 7 говорит, что вы не можете

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e не определен и обратные слеши определены реализацией:

Если первый операнд -n или любой из операндов содержит символ <backslash>, результаты определяются реализацией.

если у вас нет дополнительного расширения XSI.

Так что используйте вместо этого printf :

операнд формата должен использоваться как строка формата, описанная в нотации формата файла XBD [...]

обозначение формата файла:

\n <newline> Переместите позицию печати в начало следующей строки.

Также имейте в виду, что Ubuntu 15.10 и большинство дистрибутивов реализуют echo как:

  • встроенный Bash: help echo
  • автономный исполняемый файл: which echo

что может привести к некоторой путанице.

2

Я наконец правильно отформатировал эту строку с помощью printf "$string" . Спасибо вам всем.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .