【发布时间】:2011-10-29 21:33:00
【问题描述】:
我无法理解 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
但是,如果 date | 从第 4 行中删除,则输出与我预期的一样:
returning 0
returncode: 0
似乎上面使用的return 语句的行为方式与我认为break 语句的行为方式相同,但仅当循环位于管道的右侧时。为什么会这样?我在Bash man page 或网上找不到任何解释这种行为的东西。该脚本在 Bash 4.1.5 和 Dash 0.5.5 中的行为方式相同。
【问题讨论】:
-
有趣。是的,return 的行为似乎有点像 break;还可以在 if 语句中使用 return,您可以看到这种情况发生。除非 if 表达式非常简单。