Подтвердить что ты не робот

Добавление символов новой строки в переменные оболочки unix

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

VARIABLE="$VARIABLE '\n' SomeData"

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

4b9b3361

Ответ 1

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

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

дает мне

a
b

Ответ 2

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

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

echo "$VARIABLE"
PreviousData
SomeData

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

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

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

Ответ 3

VAR="one"
VAR="$VAR.\n.two"
echo -e $VAR

Вывод:

один.

.two

Ответ 4

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

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

ВЫВОД:

Foo Bar
SomeData

Ответ 5

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

Итак, другой способ сделать это будет включать в себя одиночные кавычки, чтобы "\n" отображался.

FOO=$'# Markdown Title #\n'
BAR=$'Be *brave* and **bold**.'
FOOBAR="$FOO$BAR"

echo "$FOOBAR"

Вывод:

# Markdown Title #
Be *brave* and **bold**.

Ответ 6

Одиночная цитата Все специальные символы между этими цитатами теряют особое значение.
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"

Ответ 7

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

VARIABLE="$VARIABLE
SomeData"

Ответ 8

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

Также не забывайте использовать 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}"

Выходы:

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

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