Ответ 1
Попробуйте $'\n'
:
VAR=a
VAR="$VAR"$'\n'b
echo "$VAR"
дает мне
a
b
Я новичок в сценариях оболочки. У меня есть переменная в оболочке script, в которой я хотел бы форматировать данные. Переменная сохраняет новые данные во время каждой итерации цикла. Каждый раз, когда сохраняются новые данные, я хотел бы вставить новый символ строки. Вот как я пытаюсь сохранить данные в переменной.
VARIABLE="$VARIABLE '\n' SomeData"
К сожалению, выход включает в себя литерал '\n'
Любая помощь будет оценена. Спасибо заранее.
Попробуйте $'\n'
:
VAR=a
VAR="$VAR"$'\n'b
echo "$VAR"
дает мне
a
b
Обычная техника:
nl='
'
VARIABLE="PreviousData"
VARIABLE="$VARIABLE${nl}SomeData"
echo "$VARIABLE"
PreviousData
SomeData
Также распространено, чтобы предотвратить случайное начало вашей строки с новой строки:
VARIABLE="$VARIABLE${VARIABLE:+$nl}SomeData"
(Выражение ${VARIABLE:+$nl}
будет расширяться до новой строки тогда и только тогда, когда VARIABLE установлен и не пуст.)
VAR="one"
VAR="$VAR.\n.two"
echo -e $VAR
один.
.two
Помимо $'\n'
, вы можете использовать printf
также так:
VARIABLE="Foo Bar"
VARIABLE=$(printf "${VARIABLE}\nSomeData")
echo "$VARIABLE"
ВЫВОД:
Foo Bar
SomeData
У меня возникла проблема со всеми остальными решениями: при использовании #
, а затем SPACE
(довольно часто при записи в Markdown) оба разделились бы на новую строку.
Итак, другой способ сделать это будет включать в себя одиночные кавычки, чтобы "\n" отображался.
FOO=$'# Markdown Title #\n'
BAR=$'Be *brave* and **bold**.'
FOOBAR="$FOO$BAR"
echo "$FOOBAR"
Вывод:
# Markdown Title #
Be *brave* and **bold**.
Одиночная цитата Все специальные символы между этими цитатами теряют особое значение.
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"
Это намного проще, чем вы думаете:
VARIABLE="$VARIABLE
SomeData"
Основываясь на первых двух решениях, я бы сделал, как показано ниже. Конкатенация строк с оператором '+ =', мне как-то понятнее.
Также не забывайте использовать 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}"
Выходы:
Это первая строка
Это третья строка ПОСЛЕ вставленной новой строки