我正在尝试从管道捕获输出并将其存储在变量中。使用子shell即var = $(computeOutput)将无法工作,因为computeOutput函数本身正在设置需要与输出存储在同一范围内的其他变量。如果我使用子shell,则其他变量将在子shell的本地副本中设置,但不在父shell中设置。
我想到的一个解决方案如下:
鉴于功能......
function storeOutput(){ VAR = $(猫) }
......当我做以下事情时......
回声“你好”| storeOutput; echo $ var...“你好”,var的值打印在控制台上
然而,当我在脚本中使用此函数而不是获得正确的结果时,我得到了当前目录内容的列表。仅供参考我使用安装了mac端口的mac OSX。
谁能解释为什么会这样?或者更好的建议另一种解决方案
答案 0 :(得分:1)
问题解决了:在脚本中我将多行输出传递给storeOutput函数。当我打印var的值时,我忘了将它括在双引号中,即“$ var”,所以假设它将输出的一部分视为命令,例如ls
除此之外,函数storeOutput(){var = $(cat)}似乎可以正常工作