虽然可以将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]命令组:{ ... } | ...
答案 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