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

linux bash shell

32990 просмотра

2 ответа

1141 Репутация автора

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

#!/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

Тем не менее, когда я запускаю этот скрипт

./temp.sh

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

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

Автор: Dave Источник Размещён: 28.02.2014 05:22

Ответы (2)


124 плюса

61299 Репутация автора

Решение

Цитируйте свои переменные. Вот почему

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

$ echo $f
fafafda adffd adfadf adfafd afd

$ echo "$f"
fafafda
adffd
adfadf
adfafd
afd

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

Автор: jaypal singh Размещён: 28.02.2014 05:25

1 плюс

19 Репутация автора

Я столкнулся с той же проблемой, цитата поможет

ubuntu@host:~/apps$ apps="abc
> def"
ubuntu@host:~/apps$ echo $apps
abc def
ubuntu@host:~/apps$ echo "$apps"
abc
def
Автор: Bob Размещён: 13.02.2019 07:08
Вопросы из категории :
32x32