繁体   English   中英

bash 函数因 set -e 而失败

[英]bash function fails with set -e

我在使用set -e时发现了一些奇怪的行为。 一个简单的代码: [ ${var} } && echo "text"在函数外工作正常,但当相同的代码在函数中时会导致脚本退出。 这仅在var=""时发生。

如果我使用||代码也可以正常工作或者如果我将 var 设置为某些东西。 有人对此有解释吗?

#!/bin/bash
#version 4.4.20(1)
#set -x
set -e
var=
[ ${var} ] && echo "Test before function"
echo "Before function"
function test {
    [ ${var} ] && echo "Test inside function"
}

test
echo end

考虑以下:

  • false && true以退出状态false退出。

  • 函数的默认返回值是它运行的最后一件事的返回值。

  • set -e被定义为如果任何未经检查的命令(“未经检查”是一个词,在这种情况下,具有复杂的、充满警告的、依赖于版本的、不可移植的以及通常令人惊讶的定义)返回退出,则导致提前终止除 true 以外的状态。

因此,当您有一个函数在返回之前运行a-false-thing && a-true-thing作为其最后一个命令时,该函数本身将返回 false,并且set -e如果认为该函数的调用“已检查”将终止执行.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM