最近我在使用bash时遇到了一些奇怪的问题。在尝试简化脚本时,我想到了以下一小段代码:
$ o(){ echo | while read -r; do return 0; done; echo $?;}; o
0
$ o(){ echo | while read -r; do return 1; done; echo $?;}; o
1
return
应该没有打印就退出了功能$?
,不是吗?好吧,然后我检查了是否可以单独从管道返回:
$ echo | while read -r; do return 1; done
bash: return: can only `return' from a function or sourced script
没有while
循环也会发生相同的情况:
$ foo(){ : | return 1; echo "This should not be printed.";}
$ foo
This should not be printed.
我在这里想念什么吗?Google搜索对此一无所获!我的bash版本是Debian Wheezy上的4.2.37(1)-发行版。
while
不需要复制前两个示例,为什么不删除它们呢?它分散了重点。
while
对于带有的管道,循环是非常常见的用法return
。第二个例子更直接了,但这是我不相信任何人都会使用的东西