bash是一种解释性语言吗?

Jam*_* Ko 14 bash shell scripting-language interpreted-language compiled-language

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

但是,我无法在维基百科的页面上找到关于解释语言的 bash 或在Google上进行大量搜索的参考.我还在Programmers Stack Exchange上找到了一个似乎暗示bash不是解释语言的页面 - 如果不是,那么它是什么?

Kei*_*son 20

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

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

echo hello
Run Code Online (Sandbox Code Playgroud)

要么

cp foo.txt bar.txt
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

底线:是的,bash是一种解释性语言.或者,更准确地说,bash是解释语言的解释器.(名称"bash"通常是指shell /解释器而不是它所解释的语言.)它与从脚本开始设计的其他解释语言有一些显着差异,但这些差异不足以删除它来自"解释语言"的范畴.


Bob*_*ous 7

根据GNU Bash参考手册, Bash是一名翻译:

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