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

Как сохранить разрывы строк при сохранении вывода команды в переменную в bash?

Im с использованием оболочки bash в Linux. У меня есть этот простой script...

#!/bin/bash

TEMP=`sed -n '/'"Starting deployment of"'/,/'"Failed to start context"'/p' "/usr/java/jboss/standalone/log/server.log" | tac | awk '/'"Starting deployment of"'/ {print;exit} 1' | tac`
echo $TEMP

Однако, когда я запускаю этот script

./temp.sh

весь вывод печатается без возврата каретки/новых строк. Не уверен, что его способ Im сохраняет вывод в $TEMP или сам эхо-команду.

Как сохранить вывод команды в переменной и сохранить разрывы строк/каретки?

4b9b3361

Ответ 1

Введите свои переменные. Вот почему:

$ f="fafafda
> adffd
> adfadf
> adfafd
> afd"

$ echo $f
fafafda adffd adfadf adfafd afd

$ echo "$f"
fafafda
adffd
adfadf
adfafd
afd

Без кавычек оболочка заменяет $TEMP на содержащиеся в ней символы (одна из которых является новой строкой). Затем перед вызовом echo оболочка разбивает эту строку на несколько аргументов с помощью Internal Field Separator (IFS) и передает этот итоговый список аргументов echo. По умолчанию параметр IFS задается как пробел (пробелы, табуляции и новые строки), поэтому оболочка прерывает вашу строку $TEMP в аргументы и никогда не увидит новую строку, потому что оболочка считает ее разделителем, как и пробел.