将命令的多行输出分配给变量

时间:2018-01-29 11:27:33

标签: bash

我需要将命令的多行输出分配给变量。 我读了这两个帖子:

assigning the output of a command to a variable in a shell script

Capturing multiple line output into a Bash variable

它适用于echo示例(多行命令):

#!/bin/bash
output="$( bash <<EOF
echo first
echo second
echo third
EOF
)"
echo "$output"

但它似乎不适用于具有多行输出的一个命令。我跑的时候

output="$( bash <<EOF
echo abc
uncrustify -c ~/.uncrustify.cfg --check filename
echo def
EOF
)"

我将收到第二行默认uncrustify -c ~/.uncrustify.cfg --check filename输出:

FAIL: filename (File size changed from 404 to 417)

uncrustify -c ~/.uncrustify.cfg --check filename的默认输出为:

Parsing: filename as language OC
FAIL: filename (File size changed from 404 to 417)

我想将这两行分配给输出变量并将所有输出隐藏到控制台。

1 个答案:

答案 0 :(得分:0)

为什么不尝试:

output=`echo abc && uncrustify -c ~/.uncrustify.cfg --check filename && echo def`

或者更好的是,让变量存储新行:

output="$(echo abc)\n$(uncrustify -c ~/.uncrustify.cfg --check filename 2>&1)\n$(echo def)"
echo -e "$output"

请注意与-e一起使用的echo标记,因为这样可以将\n序列转换为换行符。