shell 如何在将命令输出存储到变量时保留换行符?

lmyy7pcs  于 2023-10-23  发布在  Shell
关注(0)|答案(2)|浏览(195)

我在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命令本身。
如何将命令的输出存储到变量中并保留换行符/回车符?

ulydmbyx

ulydmbyx1#

使用shell脚本时,需要始终对变量加引号,特别是在处理字符串时。
下面是一个问题的例子:

  • 示例变量:*
$ f="fafafda
> adffd
> adfadf
> adfafd
> afd"

输出不带引号的变量:

$ echo $f
fafafda adffd adfadf adfafd afd

输出WITH引用变量:

$ echo "$f"
fafafda
adffd
adfadf
adfafd
afd
  • 说明:*

如果没有引号,shell将用$TEMP包含的字符(其中一个是换行符)替换$TEMP。然后,在调用echo之前,shell使用Internal Field Separator(IFS)将该字符串拆分为多个参数,并将结果参数列表传递给echo。默认情况下,IFS设置为空白(空格、制表符和换行符),因此shell将$TEMP字符串分割为参数,并且永远看不到换行符,因为shell将其视为分隔符,就像空格一样。

ecbunoof

ecbunoof2#

我遇到了同样的问题,引用一句会有帮助

ubuntu@host:~/apps$ apps="abc
> def"
ubuntu@host:~/apps$ echo $apps
abc def
ubuntu@host:~/apps$ echo "$apps"
abc
def

相关问题