为什么这个Bash脚本不出错?

前端之家收集整理的这篇文章主要介绍了为什么这个Bash脚本不出错?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的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,所以在忽略了错误的行之后,执行以某种方式恢复不是在下一个语法正确的行,而是在块结束之后?

我有两个问题:

>发生了什么事?
>今后如何保护自己免受这种行为?

>如果运行命令 [,并且只是检查它的返回码。 Bash不知道也不关心[command]的语法。

你可以在其中放一些其他的命令,Bash仍然不知道它的特定语法。
>有两件事情想到:

>使用[[而不是[:Bash确实知道并关心它的语法。
>使用ShellCheck1;在线,手动或在您最喜欢的编辑器。

如果和-e处理退出代码:如果它不是零,如果不会让你进入那个块,而-e将退出。你一次也不能真正拥有这两种行为。 (好吧,似乎[出现与错误结果(1)和语法错误(2)不同的代码,所以可能“检测”语法错误。)

还有一些其他的工具,但这是我唯一知道的一个。建议欢迎。

猜你在找的Bash相关文章