Bash 是一种解释型语言吗?

Is Bash an interpreted language?

从我目前阅读的内容来看,bash 似乎符合解释型语言的定义:

但是,我在 Programmers Stack Exchange 的 Wikipedia's page for interpreted languages, or by extensive searches on Google. I've also found a page 上找不到对 bash 的引用,这似乎暗示 bash 不是一种解释型语言 - 如果不是,那么这是什么?

Bash 是根据 GNU Bash Reference Manual:

的解释器

Bash is the shell, or command language interpreter, for the GNU operating system.

Bash绝对是解释;我认为这没有任何合理的问题。

关于它是否是一种语言,可能存在一些争议。它主要设计用于交互使用,执行操作系统提供的命令。对于很多特定类型的用法,如果您只是键入

这样的命令
echo hello

cp foo.txt bar.txt

执行简单的命令很容易被认为是"just"。从这个意义上讲,它与 Perl 和 Python 等解释性语言有很大不同,后者虽然 可以 交互使用,但主要用于编写 脚本 (解释程序)。

这种强调的一个结果是它的设计针对交互使用进行了优化。字符串不需要引号,大多数命令在输入后立即执行,你用它做的大多数事情都会调用外部程序而不是内置功能,等等。

但正如我们所知,也可以使用 bash 编写脚本,并且 bash 有很多功能,尤其是流量控制结构,主要用于脚本(尽管它们也可以在命令行中使用)。

bash 和许多脚本语言之间的另一个区别是 bash 脚本是按顺序读取、解析和执行的。 bash 脚本中间的语法错误在执行到它之前不会被检测到。相比之下,Perl 或 Python 脚本在执行开始之前被完全解析。 (像 eval 这样的东西可以改变它,但一般的想法是有效的。)这是一个显着的差异,但它并不标志着明显的分界线。如果有的话,它使 Perl 和 Python 更类似于编译语言。

底线:是的,bash 是一种解释型语言。或者,也许更准确地说,bash 是解释语言的解释器。 (名称 "bash" 通常指的是 shell/interpreter 而不是它解释的语言。)它与其他从一开始就为脚本设计的解释语言有一些显着差异,但这些差异并不存在不足以将其从 "interpreted languages".

类别中删除