将多行输出捕获到Bash变量中

10 浏览
0 Comments

将多行输出捕获到Bash变量中

我有一个名为“myscript”的脚本,它输出以下内容:

abc
def
ghi

在另一个脚本中,我调用:

declare RESULT=$(./myscript)

并且$RESULT得到了值

abc def ghi

是否有一种方法可以将结果与换行符一起存储,或使用“\\n”字符,以便我可以使用“echo -e”输出它?

admin 更改状态以发布 2023年5月22日
0
0 Comments

这种方法的另一个陷阱是命令替换$() 去掉尾随换行符。这可能并不总是很重要,但如果你真的想要保留完全的输出内容,你需要使用另一行代码和一些引用:

RESULTX="$(./myscript; echo x)"
RESULT="${RESULTX%x}"

这个特别重要,特别是当你想要处理所有可能的文件名时(以避免未定义的行为,比如处理错误的文件)。

0
0 Comments

实际上,RESULT 包含了您想要展示的内容- 以此来演示:

echo "$RESULT"

展示的内容来自于:

echo $RESULT


如评论中所述,差别在于:

  • (1) 双引号版本的变量(echo "$RESULT")完全保留了变量中值的内部间距 - 换行符、制表符、多个空格等,而(2) 未引用的版本(echo $RESULT)则将每个一个或多个空格、制表符和换行符的序列替换为单个空格。因此,(1)保留了输入变量的形状,而(2)则创建了一个可能非常长的单行输出,其中“单词”之间由单个空格分隔(其中“单词”是非空白字符的序列,在任何单词中都不必包含任何字母数字字符)。
0