2
#!/bin/bash

function doSomething() {
    callee
    echo $?
    echo "It should go to here!"
}

function callee() {
    cat line.txt |while read ln
    do
        echo $ln
        if [ 1 ] ;then
            { echo "This is callee" &&
            return 2; }
        fi  
    done
    echo "It should not go to here!"
}


doSomething

下面是结果

aa
This is callee
It should not go to here!
0
It should go to here!

为什么“return”像“break”一样工作?

我要它退出功能!不仅打破循环......

4

3 回答 3

6

这是因为您正在使用管道进入while循环,该循环在子外壳(在 Bash 中)中运行。您是从子外壳返回,而不是从函数返回。尝试这个:

function callee() { 
    while read ln 
    do 
        echo $ln 
        if [ 1 ] ;then 
            echo "This is callee" 
            return 2;   
        fi   
    done  < line.txt
    echo "It should not go to here!" 
} 

杀猫!

于 2012-09-13T13:18:51.130 回答
1

while子外壳中执行(由于管道),因此您所做的任何事情都只会在该外壳内生效。例如,您不能更改包含范围内的变量值。

于 2012-09-13T13:14:48.360 回答
-1

你应该使用

exit [number as status]

例如

exit 0

要不就

exit

exit 命令终止脚本。它还可以返回一个值,该值可供脚本的父进程使用。

于 2012-09-13T13:19:13.010 回答