2011-09-05 70 views
1

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

一个解决方案我认为是这样的:

鉴于功能...

功能storeOutput(){VAR = $(猫) }

...当我请执行以下操作...

echo“hello”| storeOutput;回声是$ var

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

然而,当我使用此功能在脚本中,而不是得到正确的结果我得到的一个上市当前目录的内容。仅供参考我正在使用安装了mac端口的mac OSX。

任何人都可以解释为什么发生这种情况?或更好地提供更好的解决方案

+0

它不是很清楚什么'var = $(猫)'应该todo。您应该按照提供非功能性示例的方式发布简化代码。 – Lynch

+0

请记住,如果您不向cat提供参数,则需要std-in并将该数据传递给std-out。子shell从表达式$(cat)的父shell中继承std-in,并且由于“$”,结果被父shell解释为文本。该文本然后在赋值var = $(cat)的右侧使用。它是从管道捕获输出的一种方式。 – murungu

回答

1

问题解决了:在脚本中,我将多行输出管道输送到storeOutput函数。当我打印var的值时,我忘记用双引号将其括起来,即“$ var”,因此假设它将部分输出视为命令,如ls

除此之外,函数storeOutput(){var = $(猫)}似乎工作

相关问题