4

我有这个 Bash 脚本:

#!/bin/bash
set -x
function doSomething() {
    callee
    echo "It should not go to here!"
}

function callee() {
    ( echo "before" ) && (echo "This is callee" && exit 1 )                                                                                   
    echo "why I can see this?"
}


doSomething

这是结果:

+ set -x
+ doSomething
+ callee
+ echo before
before
+ echo 'This is callee'
This is callee
+ exit 1
+ echo 'why I can see this?'
why I can see this?
+ echo 'It should not go to here!'
It should not go to here!

我看到了命令exit,但它没有退出脚本——为什么不起作用exit

4

3 回答 3

5

您是exit从子shell 内部调用的,所以这就是正在退出的shell。试试这个:

function callee() {
    ( echo "before" ) && { echo "This is callee" && exit 1; }                                                                                   
    echo "why I can see this?"
}

但是,这将从任何名为callee. 您可能希望使用return而不是exit从函数返回。

于 2012-09-04T14:52:28.583 回答
3

当您在其中运行命令时,()您将生成一个子shell。因此,当您exit在该子外壳中调用时,您只是退出它,而不是您的顶级脚本。

于 2012-09-04T14:52:48.167 回答
1

因为圆括号创建了一个新的嵌套shell,它通过exit退出。

于 2012-09-04T14:53:03.853 回答