Bash 和双重回显

Bash 和双重回显

我有以下代码。在所有情况下,我都期望得到1 1。有人能解释一下为什么在第一种情况下我没有得到预期的输出吗?

这个问题看起来很简单,我想我遗漏了一些基本的东西。

提前致谢。

#!/bin/bash

f(){
    echo $1
}
ff(){
    echo $1 $1
}

# expecting 1 1, but got empty      
f 1 | ff

# ok
X=$(f 1)
ff $X

答案1

在您不起作用的示例中,管道将第一个函数的标准输出发送f到第二个函数的标准输入ff。该函数ff不处理其标准输入;它正在处理传递给它的参数。

以下是使第一行发挥作用的方法:

ff `f 1`

反引号执行f 1并将结果值作为参数传递给ff

read如果您想读取输入,也可以使用:

ff()
{
  while read in
  do
    echo $in $in
  done
}

相关内容