Я использую оболочку 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.
Как сохранить вывод команды в переменной и сохранить разрывы строк / возврат каретки?
linux
bash
shell
line-breaks
Дэйв
источник
источник
don't
хранитьcommands
вvariables
.Use
аfunction
вместоОтветы:
Цитируйте свои переменные. Вот почему:
$ 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
строку на аргументы и никогда не видит новую строку, потому что оболочка считает ее разделителем, как и пробел.источник
xdotool type "$myVar"
не работает. он все еще набирает содержимое переменной без новых строкFOO="$(echo $VAR)"
: как$VAR
правильно цитировать, когда это уже внутри кавычек?"$(echo "$VAR")"
. Да, странно разбирать, но шеллам видимо проще, чем нам.Я столкнулся с той же проблемой, поможет цитата
ubuntu@host:~/apps$ apps="abc > def" ubuntu@host:~/apps$ echo $apps abc def ubuntu@host:~/apps$ echo "$apps" abc def
источник