如何在 Linux 中不运行 Bash 脚本的情况下检查其语法?
在编程时,我们总有可能犯各种错误。编译器和解释器在这种情况下总是可以帮助我们,但为了使用它们,我们必须运行程序或某种 IDE,它会不断检查这些错误并在每次出现错误时提醒我们,以便我们能够纠正它们。
如果我们不想在花哨的 IDE 中编写代码,也不想运行程序,那么如果存在任何选择,我们可供选择的余地就非常少了。如果您正在编写 Bash 脚本,我们当然可以检查 Bash 脚本是否存在任何语法错误。
需要注意的是,我们能够检测到的语法错误仅限于编译时错误,而不是运行时错误。
示例
让我们探索一个示例。假设我们有一个 Bash 脚本,其中包含类似以下的代码:
for f in *.txt; do mv "$f" "${f// /_}"; done
以上代码很简单,它只是循环遍历当前目录中所有 **.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
输出将不包含任何内容。
因此,最终的结论是,只有在您想要检查语法错误时才应使用此命令。
广告