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 に答える