将函数调用赋给变量时终止bash脚本

将函数调用赋给变量时终止bash脚本,bash,exit,subshell,Bash,Exit,Subshell,我要演示以下代码: #!/bin/bash function demo() { echo "This is A" exit 1 echo "This is B" } input=$(demo) echo "${input}" echo "This is C" 您可以看到,如果我运行此脚本,它将打印出以下输出: This is A This is C 由于我有退出1功能,脚本没有终止并打印最

我要演示以下代码:

#!/bin/bash
function demo() {

   echo "This is A"
   exit 1
   echo "This is B"
}


input=$(demo)
echo "${input}"
echo "This is C"
您可以看到,如果我运行此脚本,它将打印出以下输出:

This is A
This is C
由于我有退出1功能,脚本没有终止并打印最后一条语句
这是C

但是当我这样调用函数时:

#!/bin/bash
function demo() {

   echo "This is A"
   exit 1
   echo "This is B"
}


demo
echo "${input}"
echo "This is C"
然后程序终止,没有打印最后一条语句“This is C”。输出为:

This is A

对于这一点是否有解释,以及当
退出1
时,如何强制脚本终止,并将函数分配给一个变量,如示例所示。这意味着,在退出1之后不应打印其他语句。您可以在分配变量时检查退出状态,如果失败,则退出主脚本

input=$(demo) || exit 1

顺便说一句:我建议不要对函数使用内部关键字。请参阅
type test
@Cyrus,谢谢您提供的信息。
$(…)
在子shell中运行命令,而
exit
仅从子shell退出,而不是从原始脚本退出。如果退出脚本,则为变量赋值有什么意义?如何使用变量?@Barmar在大型应用程序中,如果函数产生返回代码为1的错误,则需要退出此脚本。所以,它不应该运行其他语句并在出现错误时终止自身。示例在demo()中调用API时,出现了一些错误,所以将错误的数据分配给变量是无用的。终止脚本并告诉用户出了什么问题。谢谢。。。这很好用。