这是我的Bash脚本:
#!/bin/bash -e if [ == "" ]; then echo "BAD" exit 1 fi echo "OK"
这里的输出:
./test.sh: line 3: [: ==: unary operator expected OK
返回码为0。
在第3行有一个明显的语法错误。而不是引发语法错误,拒绝运行脚本,不知何故,脚本只是运行并在运行时报告语法错误。 -e标志没有保护我,显然if语句中的语法错误构成了一个错误的条件,而不是立即退出程序的原因。但是,不管怎样,Bash已经解析了整个if … fi block,所以在忽略了错误的行之后,执行以某种方式恢复不是在下一个语法正确的行,而是在块结束之后?
我有两个问题:
>发生了什么事?
>今后如何保护自己免受这种行为?