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

Posted

技术标签:

【中文标题】将命令输出存储到变量时如何保留换行符?【英文标题】:How to preserve line breaks when storing command output to a variable? 【发布时间】:2014-04-01 20:17:56 【问题描述】:

我在 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 命令本身。

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

【问题讨论】:

它们很好地保存在变量中(最后一个除外);是你的回声被打破了。请参阅mywiki.wooledge.org/BashPitfalls 条目 #14 另外,don'tcommands 存储在variables 中。 Use 改为 function 【参考方案1】:

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

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

$ echo $f
fafafda adffd adfadf adfafd afd

$ echo "$f"
fafafda
adffd
adfadf
adfafd
afd

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

【讨论】:

xdotool type "$myVar" 不起作用。它仍在输入变量的内容而没有换行 如果你想做类似FOO="$(echo $VAR)"的事情怎么办;当 $VAR 已经在引号内时,如何正确引用它? @weberc2 您只需再次引用它:"$(echo "$VAR")"。是的,解析起来很奇怪,但对于 shell 来说显然比我们更容易。【参考方案2】:

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

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

【讨论】:

在将近 5 年后回答一个问题而不在以前的答案中添加任何新的细节或提供新的解决方案不是一个好主意;请避免发布此类答案。 爱你“将近 5 年”的精确度,@MAChitgarha,:)

以上是关于将命令输出存储到变量时如何保留换行符?的主要内容,如果未能解决你的问题,请参考以下文章

如何在html textarea POST数据中保留换行符

React 输出不保留换行符

保留 TextArea 中的换行符

从文本区域获取文本时如何保留换行符?

将 HTML 表格粘贴到 Excel 中,如何在单元格中保留换行符

Textarea换行符[重复]