捕获管道的输出并将其存储在变量中

时间:2011-09-05 17:19:47

标签: bash shell pipe stdin

我正在尝试从管道捕获输出并将其存储在变量中。使用子shell即var = $(computeOutput)将无法工作,因为computeOutput函数本身正在设置需要与输出存储在同一范围内的其他变量。如果我使用子shell,则其他变量将在子shell的本地副本中设置,但不在父shell中设置。

我想到的一个解决方案如下:

鉴于功能......

function storeOutput(){   VAR = $(猫) }

......当我做以下事情时......

回声“你好”| storeOutput; echo $ var

...“你好”,var的值打印在控制台上

然而,当我在脚本中使用此函数而不是获得正确的结果时,我得到了当前目录内容的列表。仅供参考我使用安装了mac端口的mac OSX。

谁能解释为什么会这样?或者更好的建议另一种解决方案

1 个答案:

答案 0 :(得分:1)

问题解决了:在脚本中我将多行输出传递给storeOutput函数。当我打印var的值时,我忘了将它括在双引号中,即“$ var”,所以假设它将输出的一部分视为命令,例如ls

除此之外,函数storeOutput(){var = $(cat)}似乎可以正常工作