Bash:将所有stdout放入指定的变量中

时间:2015-08-24 18:08:32

标签: bash pipe

是否有像setvar这样的功能?

那么,我可以写这样的东西:

cat ... | grep ... | sed ... | setvar VALUES

echo "$VALUES" | do-anything

我不想写像:

VALUES="$(
    cat ... | grep ... | sed ...
)"
echo "$VALUES" | do-anything

1 个答案:

答案 0 :(得分:2)

我不确定您不想使用它的命令替换有什么问题。也许你想要的是一个功能。

some_cmd () {
    cat ... | grep ... | sed ...
}

some_cmd | do-anything

bash 4.2或更高版本中,运行shopt -s lastpipe(并set +m禁用监控模式后,如有必要),您可以使用

... | read VALUE

VALUE

中捕获输出的第一行
... | { read line1; read line2; }

捕获固定数量的行,或

... | readarray -t VALUES

捕获数组VALUES中的多行输出,每个元素一行。

lastpipe选项是必需的;否则,readreadarray设置的参数仅存在于为管道的最后一个元素创建的子流程中,并且不会在管道后面的shell中可用。