Bash:将命令组的输出分配给变量

时间:2017-11-19 19:20:02

标签: bash

虽然可以将shell命令的输出分配给变量,如下所示:

list=$(ls -la)

似乎我无法将命令组的输出分配给变量。这似乎不起作用:

output=${ echo "Peter"; echo "Pan"; }

但是:管道命令组[1]的输出是可能的:

{
 echo "To: $MAILTO"
 echo "From: $FROM"
 echo "Subject: $SUBJ"
 echo
 echo "Please check $HOSTNAME"
} | ssmtp $MAILTO

为什么我不能将命令组的输出分配给变量?

[1]命令组:{ ... } | ...

请参阅:https://ss64.com/bash/syntax-brackets.html

1 个答案:

答案 0 :(得分:2)

这不起作用,因为你使用花括号:

$ output=${ echo "Peter"; echo "Pan"; }
bash: ${ echo "Peter"; echo "Pan"; }: bad substitution

在花括号${...}内,bash期望变量的名称。

要捕获命令的输出,请使用parens:

$ output=$( echo "Peter"; echo "Pan"; )
$ echo "$output"
Peter
Pan