Есть ли какой-нибудь редактор для отображения буквального символа `\ n` как новой строки?

В консоли python:

print('xx\nyy')
xx
yy

В консоли bash:

echo -e 'xx\nyy'
xx
yy

В консоли mysql:

create database mytest;
use mytest;
CREATE TABLE sample(content VARCHAR(250));
insert into sample(content) values('xx\nyy');
select content from sample;
+---------+
| content |
+---------+
| xx
yy   |
+---------+

Все они обрабатывают литерал \ n как новую строку вместо буквального \ n .

cat > mytest.txt <<EOF
xx\nyy
EOF

Откройте mytest.txt с помощью vim или leadpad , вы обнаружите, что vim и листовая панель обрабатывают литерал \ n как литерал \ n , а не символ новой строки. Существует ли редактор, который обрабатывает литерал \ n как новую строку?

-1
задан 5 August 2020 в 12:05

2 ответа

TL; DR: Тенденция рассматривать \ n как новую строку не универсальна, и, когда она рассматривается как новая строка, способ избежать этого (особенно лучший способ) зависит от контекста. Оболочки на самом деле не рассматривают это как новую строку, поэтому с echo просто не передавайте -e . На других языках см. Документацию по языку.

Предпосылка этого вопроса неверна. \ n на самом деле не считается символом новой строки в большинстве случаев. Некоторые языки программирования (и языки запросов к базам данных) обрабатывают \ n специально при определенных обстоятельствах. Это довольно широко распространено, но далеко не универсально.

Когда \ n используется для обозначения новой строки, это происходит из-за конкретных правил конкретных языков, поэтому не существует полностью общего способа подавить это. В частности, там, где он вообще не обрабатывается специально, попытка подавить его обычно приводит к чему-то другому, чего вы не хотите. Во многих ситуациях запись \\ n , как предполагал вальтинатор , будет работать, но во многих других это не сработает, и даже в тех случаях, когда это работает, это часто не так. Самый ясный или самый простой способ выразить литерал \ n .

В частности, оболочки обычно не обрабатывают последовательность \ n как символ новой строки . Вы можете заставить Bash сделать это, используя специальную форму цитирования $ ' ' . То есть $ '\ n' обрабатывается как символ новой строки.

'xx \ nyy' , как вы использовали, на сегодняшний день является наиболее ясным способом выразить буквальную строку xx \ nyy в Bash из-за очень простого правила, что все между открывающая и закрывающая одинарные кавычки трактуются буквально. Я не рекомендую использовать для этого какие-либо другие формы цитирования. Это можно сделать, но это ничего не улучшает. В вашем примере преобразование выполняет echo -e .

Причина, по которой вы получили перевод строки из echo -e 'xx \ nyy' , заключается в следующем:

  • Оболочка обрабатывает \ n буквально в 'xx \ nyy' , которое после удаления кавычек становится xx \ nyy . Таким образом, вторым аргументом, переданным в echo , является xx \ nyy .
  • echo само по себе рассматривает \ n как новую строку, потому что вы передали параметр -e . Если вы этого не хотите, просто не передавайте -e .

Я должен отметить, что echo не очень переносим. Одна из причин, по которой это не так, заключается в том, что некоторые реализации echo в некоторых системах и в некоторых оболочках автоматически ведут себя так же, как echo -e в Ubuntu. (Таким образом, для написания сценариев обычно лучше предпочесть printf .) Однако реализации echo , которые, вероятно, будут использоваться в Ubuntu, - это встроенная функция Bash echo и GNU Coreutils echo , который предоставляет / bin / echo (который может быть разрешен как / usr / bin / echo в более новых системах, где / bin и / usr / bin объединены). Оба этих echo ведут себя так, как я описал: последовательности обратной косой черты, такие как \ n , печатаются буквально, если не используется параметр -e .

Что касается \ n на любом языке программирования или языке запросов к базе данных, который вы используете, общий ответ заключается в том, что вам следует обратиться к документации по языку. В вашем примере Python \ n в 'xx \ nyy' используется для обозначения новой строки. Хотя вы можете написать 'xx \\ nyy' (Python поддерживает это),

1
ответ дан 11 August 2020 в 20:11

\ n - это то, как Linux / Unix выражает «новую строку», если вы не имеете в виду два символа \ и n . Вот как набирается последовательность символов в текстовом редакторе. Если вам нужна двухсимвольная последовательность \ n в вашей строке, а не «новая строка», вам придется экранировать \ (сделайте \ не быть особенным), поместив перед ним \

"xx\\nyy"

- это строка из 6 символов x , x , \ , n , y , y .

2
ответ дан 11 August 2020 в 20:11

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

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