Bash 是一种解释型语言吗?
Is Bash an interpreted language?
从我目前阅读的内容来看,bash 似乎符合解释型语言的定义:
- 没有编译成低格式
- 每个语句最终调用 a subroutine / set of subroutines already translated into machine code(即
echo foo
调用预编译的可执行文件)
- 解释器本身,
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".
类别中删除
从我目前阅读的内容来看,bash 似乎符合解释型语言的定义:
- 没有编译成低格式
- 每个语句最终调用 a subroutine / set of subroutines already translated into machine code(即
echo foo
调用预编译的可执行文件) - 解释器本身,
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".
类别中删除