我有以下代码。在所有情况下,我都期望得到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
}