为什么在分配空变量时,bash中的陷阱会引发错误

问题描述

我已经使用陷阱功能已有一段时间了,但是遇到了一个我不明白的问题。

这里是代表:

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

existing=$(echo test | grep -oP "x")

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

我在做什么错了?

谢谢

解决方法

grep无法匹配任何内容时,它将以非零退出状态退出,从而触发ERR陷阱。由于您在这里对grep的退出状态不感兴趣,因此可以做到这一点:

existing=$(echo test | grep -oP 'x' || true)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...