【问题标题】:capture output from a pipe and store it in a variable从管道捕获输出并将其存储在变量中
【发布时间】: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) 的右侧使用该文本。它是一种从管道捕获输出的方法。

标签: bash shell pipe stdin


【解决方案1】:

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

除了函数 storeOutput() { var=$(cat) } 似乎可以工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 2018-04-13
    • 2014-03-05
    相关资源
    最近更新 更多