我开始在我的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)
使用
[ -n "$var" ] || die "result is empty"
Run Code Online (Sandbox Code Playgroud)
这样,如果$var非空,则整个语句的返回值为true ,因此ERR不会触发陷阱.