\ n не работает на терминале

\n не распознается как «линия изменения». Он просто печатает \n.

Мой терминал - терминал GNOME 3.6.2.

Сначала я заметил это с помощью команд echo, а затем с помощью скриптов оболочки.

Есть предложения, почему это не работает?

3
задан 7 August 2015 в 09:37

2 ответа

По умолчанию стандартная версия GNU echo поставленный с Ubuntu, не распознает escape-последовательности. Используйте эти -e флаг для включения этого.

Сравнивают выводы:

serg@ubuntu(bash):[/home/xieerqi]$ echo "new\nline"
new\nline
serg@ubuntu(bash):[/home/xieerqi]$ echo -e "new\nline"
new
line

В общем echo в сценариях не рекомендуется. Например, mksh версия echo действительно позволяет интерпретировать Escape.

Для мобильности сценариев, используйте эти printf функция.

serg@ubuntu(bash):[/home/xieerqi]$ printf "new\nline\n"
new
line
6
ответ дан 7 August 2015 в 19:37
  • 1
    Эй, спасибо за ответ, но ни одна из тех опций личинки работало на меня. (Одна вещь Вы предположили что я didn' t делает был эти /etc/systemd/logind.conf изменение, потому что я думаю , я хочу, чтобы он был suspend вместо hibernate, и в logind.conf странице справочника говорится that' s его значение по умолчанию.) – kuhrusty 28 March 2017 в 14:13

Ответ Serg решает только проблему с печатью новой строки (echo, printf). Если необходимо использовать новую строку в целом в сценариях оболочки, вот некоторые предложения который demostrate использование новой строки путем хранения ее к переменной $NL. Когда код работает правильно echo "a${NL}b" затем печать:

a
b

POSIX совместимый sh

Можно использовать литеральную новую строку:

NL="
"

Можно генерировать использование новой строки printf и замена команды:

NLx="$(printf \\nx)" ; NL="${NLx%x}"

Добавление x и следующее удаление его необходимо, потому что замена команды удаляет все новые строки в конце получившей строки.

Bash

В Bash можно использовать escape-последовательности для представления управляющих символов в строке между $' и ':

NL=$'\n'

Это очень удобно, но к сожалению не портативно.

1
ответ дан 7 August 2015 в 19:37
  • 1
    Эй спасибо за ответ. Я попробовал первую команду, но это; s не работающий (ошибка illegal package name in specifier must start with an alphanumeric character). Таким образом, я попробовал sudo dpkg -r --force-ovewrite jenkins, но еще раз я получаю сообщение о необходимости переустановить пакет прежде attemping удаление. – mt0s 31 October 2016 в 06:37

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

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