我有以下简单的例子,我不明白它是如何产生的:
#!/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
test1 test2
位于同一行?test1 test2
的输出需要2秒才会显示,因为只有第二个test2
应该在2秒后显示?答案 0 :(得分:1)
$(...)
捕获子shell中的stdout
命令。
echo -e
语句不会打印到调用shell的stdout
,
但是在子shell中得到缓冲。
如果删除echo $a
命令,则根本不会打印任何内容。
此示例中的子shell在wtf
完成之前不会退出。
这就是为什么你必须等待2秒,以便调用shell获得控制权,然后执行echo $a
,打印子shell捕获的所有输出。