功能中的Bash输出与预期不符

时间:2016-05-06 20:29:57

标签: bash

我有以下简单的例子,我不明白它是如何产生的:

#!/bin/bash

function wtf() {
    echo -e "test1" >&1
    sleep 2
    echo -e "test2" >&1
}

a=$(wtf)
echo $a

终端上的输出是2秒后test1 test2

当我将最后两行更改为wtf时,输出为

 test1
 test2 #after 2 seconds
  1. 为什么第一个版本中test1 test2位于同一行?
  2. 为什么行test1 test2的输出需要2秒才会显示,因为只有第二个test2应该在2秒后显示?

1 个答案:

答案 0 :(得分:1)

$(...)捕获子shell中的stdout命令。 echo -e语句不会打印到调用shell的stdout, 但是在子shell中得到缓冲。 如果删除echo $a命令,则根本不会打印任何内容。

此示例中的子shell在wtf完成之前不会退出。 这就是为什么你必须等待2秒,以便调用shell获得控制权,然后执行echo $a,打印子shell捕获的所有输出。

相关问题