bash是一种解释型语言吗?

时间:2015-05-10 20:33:17

标签: bash shell scripting-language interpreted-language compiled-language

从我到目前为止所读到的内容来看,bash似乎符合解释语言的定义:

但是,我无法在Wikipedia's page for interpreted languages上找到对bash的引用,也无法在Google上进行大量搜索。我还发现程序员堆栈交换上的a page似乎意味着bash不是一种解释性语言 - 如果它不是,那么它是什么?

2 个答案:

答案 0 :(得分:18)

Bash肯定是解释;我不认为有任何合理的问题。

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

这样的命令
echo hello

cp foo.txt bar.txt

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

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

但是正如我们所知,使用bash编写脚本也是可能的,而bash有许多功能,特别是流控制结构,主要用于脚本(尽管它们也可用于命令行)。

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

结论:是的,bash是一种解释性语言。或者,更准确地说,bash是解释语言的解释器。 (名称" bash"通常是指shell /解释器而不是它所解释的语言。)它与从脚本开始设计的其他解释语言有一些显着差异,但这些差异不是足以将其从"解释语言的类别中移除#34;。

答案 1 :(得分:7)

根据GNU Bash Reference Manual

,Bash是一名翻译
  

Bash是GNU操作系统的shell或命令语言解释器。