如何在 Linux 中不运行 Bash 脚本的情况下检查其语法?

linuxoperating systemopen source更新于 2026/2/15 2:52:17

编程时,我们难免会犯一些类型的错误。编译器和解释器总是可以帮助我们解决这些错误,但为了使用它们,我们必须运行程序或某种 IDE,不断检查这些错误,并在每次出现错误时提醒我们,以便我们能够纠正错误。

如果我们不想在花哨的 IDE 中编写代码,也不想运行程序,那么我们几乎没有其他选择。如果您正在编写 Bash 脚本,我们当然可以检查 Bash 脚本是否存在语法错误。

需要注意的是,我们能够检测到的语法错误仅限于编译时错误,而不是运行时错误。

示例

让我们来看一个例子。假设我们有一个 Bash 脚本,其中包含类似这样的代码 −

for f in *.txt; do mv "$f" "${f// /_}";完成

上面的代码很简单,它只是循环遍历当前目录中所有 .txt 文件,然后更改文件名称中含有空格的部分,因为空格会被 _(下划线) 替换。

这非常有效,现在当我们运行命令检查上面的 bash 脚本是否有语法错误时,我们将不会得到任何输出。

让我们来探讨一下这个特殊情况 −

在终端中运行以下命令,其中也包含 sample.sh 文件。

bash -n sample.sh

当我运行此命令时,终端什么也不会打印。

现在让我们修改一下 sample.sh,使其成为无效的 bash 脚本,然后再次运行相同的命令在终端中。

for f in *.txt; do mv "$f" "${f// /_}"; done = true

现在,当我们运行如下所示的命令 −

bash -n sample.sh

输出将为 −

immukul@192 linux-questions-code % bash -n sample.sh
sample.sh: line 1: syntax error near unexpected token `='
sample.sh: line 1: `for f in *.txt; do mv "$f" "${f// /_}"; done = true'

这就是我们无需运行程序就能检查语法错误的方法。现在,我们讨论了该命令只能检测编译时错误,而不会检测运行时错误,我们可以通过再次修改 sample.sh 文件来确认这一点 −

for d in *.txt; do mv "$f" "${f// /_}"; done

现在,当我们对上面显示的 sample.sh 文件运行以下命令 −

bash -n sample.sh

输出将为空。

因此,最终结论是,仅当您想要检查语法错误时才应使用该命令。


相关文章


有用资源