为什么 bash 中的 trap 在分配空变量时会抛出错误

pie*_*nvc 3 bash is-empty bash-trap

我已经使用 trap 函数有一段时间了,但遇到了一个我不明白的问题。

这是一个代表:

err_report() {
    
    echo -e "ERROR LINE $1"
    exit 1;
}
trap 'err_report ${LINENO}' ERR

existing=$(echo test | grep -oP "x")
Run Code Online (Sandbox Code Playgroud)

这将引发错误,因为 grep 的结果为空。当我在没有陷阱的情况下运行代码时,一切正常。我尝试设置set +u但没有帮助..

我在这里做错了什么?

谢谢

Ted*_*gmo 6

grep无法匹配任何内容时,它将以非零退出状态退出,从而触发陷阱ERR。由于您对此处的退出状态不感兴趣grep,因此应该可以解决问题:

existing=$(echo test | grep -oP 'x' || true)
Run Code Online (Sandbox Code Playgroud)