Bash 将命令的输出捕获到变量中并保留新行

Bash 将命令的输出捕获到变量中并保留新行,bash,command,Bash,Command,我有两个剧本parentScript.sh和childScript.sh 我希望能够在parentScript.sh内部调用childScript.sh,并返回在任何阶段发生的错误。i、 e.childScript.sh中发现的错误如下: echo "ERROR: Feed file missing for $siteTag" >&2 我知道怎么做 但是我有一种感觉,它被篡改了,我不能再printf将结果打印到一个好看的变量中。i、 e error+="$( { ./childS

我有两个剧本
parentScript.sh
childScript.sh

我希望能够在
parentScript.sh
内部调用
childScript.sh
,并返回在任何阶段发生的错误。i、 e.
childScript.sh
中发现的错误如下:

echo "ERROR: Feed file missing for $siteTag" >&2
我知道怎么做

但是我有一种感觉,它被篡改了,我不能再
printf
将结果打印到一个好看的变量中。i、 e

error+="$( { ./childScript.sh | sed 's/Output/Useless/' 2>&4 1>&3; } 2>&1 )"
error+="$( { ./childScript.sh | sed 's/Output/Useless/' 2>&4 1>&3; } 2>&1 )"
基本上应该调用脚本两次,从两个脚本中获取错误并将它们存储在变量
error
中,正如我所想的那样,它确实这样做了,但它通过使用
echo“$error”
printf“$error”
以某种方式消除了这两行代码

这里有没有人知道一种解决方案,可以从多个命令中获取错误输出,但在
childScript.sh
命令中保持对
echo
的单独调用

编辑:输出应为

ERROR: Feed file missing for (..)
ERROR: Feed file missing for (..)
ERROR: Feed file missing for (..)
而是

ERROR: Feed file missing for (..) ERROR: Feed file missing for (..) ERROR: Feed file missing for (..)
$(..)
剥离尾随换行符。这在大多数情况下都非常有用,比如

echo "Welcome to $(hostname). Enjoy your stay."
然而,在你的情况下,它会破坏它一点。您只需添加一个:

error+="$( { ./childScript.sh | sed 's/Output/Useless/' 2>&4 1>&3; } 2>&1 )"$'\n'

这并不能解决一个命令中多行的问题,只能解决多行上多个命令的问题(编辑:挂起…尝试某些操作。@insidesin命令中的换行符不会被剥离或修改。如果您使用您所说的
echo“$error”
(而不是
echo$error
或缺少引号),太好了。我想我知道发生了什么。当我从测试一迁移到另一个脚本时,我带来了我的更改,然后在现实世界的示例上进行测试…最终测试的命令调用比错误回音多,所以我想当我不能返回到每个错误的一行时,我就遇到了问题。我认为在e这是一个试图一次修复所有部件,以某种方式破坏一个部件修复另一个部件等的案例。谢谢。:)