Как сохранить разрывы строк при сохранении вывода команды в переменную в 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 или сам эхо-команду.
Как сохранить вывод команды в переменной и сохранить разрывы строк/каретки?
Ответы
Ответ 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
в аргументы и никогда не увидит новую строку, потому что оболочка считает ее разделителем, как и пробел.
Ответ 2
Я столкнулся с той же проблемой, цитата поможет
[email protected]:~/apps$ apps="abc
> def"
[email protected]:~/apps$ echo $apps
abc def
[email protected]:~/apps$ echo "$apps"
abc
def