我对Bash内置的return
命令的行为感到困惑。这是一个示例脚本。
#!/bin/bash
dostuff() {
date | while true; do
echo returning 0
return 0
echo really-notreached
done
echo notreached
return 3
}
dostuff
echo returncode: $?
这个脚本的输出是:returning 0
notreached
returncode: 3
然而,如果将第4行中的date |
删除,输出结果将与我预期的相同:
returning 0
returncode: 0
看起来像上面使用的return
语句的作用方式,正是我认为break
语句应该表现的方式,但仅当循环在管道的右侧时才是如此。为什么会这样?我在Bash man page或网络上找不到任何解释这种行为的内容。该脚本在Bash 4.1.5和Dash 0.5.5中的行为相同。