使用set -e时,bash单行条件失败

LiM*_*Mar 0 bash

我开始在我的bash脚本中使用set -e,并发现简短形式的条件表达式会破坏脚本执行.

例如,以下行应检查$ var是否为空:

[ -z "$var" ] && die "result is empty"
Run Code Online (Sandbox Code Playgroud)

但是当$ var的长度非零时,会导致脚本无声退出.

我在很多地方使用过这种形式的条件表达式......

我该怎么做才能让它正常运行?用"if"构造重写一切(这会很难看)?还是放弃"set -e"?

编辑:每个人都在要求代码.这是完整的[非]工作示例:

#!/bin/bash
set -e

function check_me()
{
    ws="smth"
    [ -z "$ws" ] && echo " fail" && exit 1
}

echo "checking wrong thing"
check_me
echo "check finished"
Run Code Online (Sandbox Code Playgroud)

我希望它能在函数调用之前和之后打印两个回声.但是它在check_me函数中默默地失败了.输出是:

checking wrong thing
Run Code Online (Sandbox Code Playgroud)

l0b*_*0b0 5

使用

[ -n "$var" ] || die "result is empty"
Run Code Online (Sandbox Code Playgroud)

这样,如果$var非空,则整个语句的返回值为true ,因此ERR不会触发陷阱.