一尘不染

将命令输出存储到bash中的变量时,如何保留换行符?

linux

我在Linux上使用bash shell。我有这个简单的脚本……

#!/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命令本身的方式。

如何将命令的输出存储到变量并保留换行符/回车符?


阅读 474

收藏
2020-06-02

共1个答案

一尘不染

引用 您的变量。原因如下:

$ 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设置为空白(空格,制表符和换行符),因此Shell将您的$TEMP字符串切成参数,并且永远也看不到换行符,因为Shell会将其视为分隔符,就像空格一样。

2020-06-02