Добавление символов новой строки в переменные оболочки Unix - PullRequest
32 голосов
/ 23 февраля 2012

Я новичок в сценариях оболочки.У меня есть переменная в сценарии оболочки, в которой я хотел бы отформатировать данные.Переменная хранит новые данные во время каждой итерации цикла.Каждый раз, когда новые данные сохраняются, я хотел бы вставить символ новой строки.Вот как я пытаюсь сохранить данные в переменной.

VARIABLE="$VARIABLE '\n' SomeData"

К сожалению, вывод включает в себя литерал '\n'.Заранее спасибо.

Ответы [ 8 ]

56 голосов
/ 23 февраля 2012

Попробуйте $'\n':

VAR=a
VAR="$VAR"$'\n'b
echo "$VAR"

дает мне

a
b
21 голосов
/ 23 февраля 2012

Обычная техника:

nl='
'
VARIABLE="PreviousData"
VARIABLE="$VARIABLE${nl}SomeData"

echo "$VARIABLE"
PreviousData
SomeData

Также распространена, чтобы предотвратить случайное начало строки с новой строки:

VARIABLE="$VARIABLE${VARIABLE:+$nl}SomeData"

(выражение ${VARIABLE:+$nl} расширится досимвол новой строки, если и только если переменная VARIABLE установлена ​​и не пуста.)

5 голосов
/ 23 февраля 2012
VAR="one"
VAR="$VAR.\n.two"
echo -e $VAR

Выход:

один..two

3 голосов
/ 23 февраля 2012

Кроме $'\n' вы можете использовать printf также вот так:

VARIABLE="Foo Bar"
VARIABLE=$(printf "${VARIABLE}\nSomeData")
echo "$VARIABLE"

ВЫВОД:

Foo Bar
SomeData
1 голос
/ 10 июля 2017

Это намного проще, чем вы думаете:

VARIABLE="$VARIABLE
SomeData"
1 голос
/ 01 июля 2017

Одиночная кавычка Все специальные символы между этими кавычками теряют свои особое значение.
https://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm

Таким образом, используемый вами синтаксис делает что-то другое, чего вы хотите достичь.

Это то, что вам нужно:

Конструкция $ '\ X' делает опцию -e в echo ненужной.
https://linux.die.net/abs-guide/escapingsection.html

echo -e "something\nsomething"

или

echo "something"$'\n'"something"
1 голос
/ 08 сентября 2014

У меня была проблема со всеми остальными решениями: при использовании #, за которым следует SPACE (довольно часто при записи в Markdown), оба будут разделены на новую строку.способ сделать это будет включать использование одинарных кавычек, так что "\ n" будет отображаться.

0 голосов
/ 12 марта 2018

Основываясь на первых двух решениях, я бы сделал, как показано ниже.Конкатенация строк с оператором '+ =' мне как-то понятнее.

Также не забывайте использовать printf, а не echo, вы избавите себя от многих проблем

sometext="This is the first line"
sometext+=$'\n\n'
sometext+="This is the second line AFTER the inserted new lines"
printf '%s' "${sometext}"

Выводы

Это первая строка

Это третья строка ПОСЛЕ вставленной новой строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...