【发布时间】:2011-09-05 17:19:46
【问题描述】:
我正在尝试从管道捕获输出并将其存储在变量中。使用子shell 即 var=$(computeOutput) 将不起作用,因为 computeOutput 函数本身正在设置需要存储在与输出相同范围内的其他变量。如果我使用子shell,其他变量将设置在子shell的本地副本中,而不是在父shell中。
我想到的一个解决方案如下:
给定函数...
函数存储输出(){ var=$(猫) }
...当我执行以下操作时...
回声“你好” |存储输出;回声 $var
... "hello",var 的值,打印在控制台上
但是,当我从脚本内部使用此函数而不是获得正确的结果时,我会得到当前目录内容的列表。仅供参考,我使用的是安装了 mac 端口的 mac OSX。
谁能解释为什么会这样???或者更好的建议其他解决方案
【问题讨论】:
-
目前还不清楚
var=$(cat)应该做什么。您应该按原样发布简化代码并提供非功能示例。 -
请记住,如果您不向 cat 提供参数,它会接受 std-in 并将该数据传递给 std-out。子 shell 从表达式 $(cat) 中的父 shell 继承标准输入,并且由于“$”,父 shell 将结果解释为文本。然后在赋值 var=$(cat) 的右侧使用该文本。它是一种从管道捕获输出的方法。