我们都知道shell在函数中使用return表示立刻退出当前函数,但是有一个特例就是管道。请看下面的代码:
#!/bin/bash
function main()
{
echo 1
echo 2 | while read line
do
echo $line
return 0
done
echo 3
}
main
运行结果如下:
1
2
3
原因就是使用管道会创建一个子shell来执行后面的内容,而在该子shell中执行return,只能退出当前子shell,并不能退出函数。你可以理解为调用了一个匿名函数。