从我到目前为止所读到的内容,bash似乎适合解释的语言的定义:
- 它不被编译成较低的格式
- 每个语句最终都会调用已经翻译成机器代码的子例程/子例程(即
echo foo
调用预编译可执行文件) - 解释器本身
bash
已经被编译了
但是,我找不到Wikipedia页面上的bash的引用,用于解释的语言,或通过在Google上进行大量搜索。我还在程序员堆栈交换上找到了一个页面,这似乎暗示着bash不是一种解释的语言 - 如果不是,那是什么?
bash绝对是解释;我认为这没有任何合理的问题。
关于它是否是语言,可能存在一些争议。它主要用于交互式使用,执行操作系统提供的命令。对于许多特定的用法,如果您只是输入
之类的命令echo hello
或
cp foo.txt bar.txt
很容易认为执行简单命令的"只是"。从这个意义上讲,它与Perl和Python等解释的语言完全不同,尽管它们可以交互式使用,但主要用于编写 scripts (解释的程序)。P>
这种重点的结果是,其设计已优化用于交互式使用。字符串不需要引号,大多数命令输入后立即执行,您使用的大多数命令都会调用外部程序而不是内置功能。
,但正如我们所知,也可以使用bash编写脚本,而bash具有许多功能,尤其是流控制结构,这些功能主要用于脚本(尽管它们也可以在命令行中使用)。
bash和许多脚本语言之间的另一个区别是,按顺序读取,解析和执行bash脚本。在执行到执行之前,不会检测到BASH脚本中间的语法错误。相比之下,Perl或Python脚本在执行开始之前已完全解析。(诸如eval
之类的事情可以改变这一点,但总体想法是有效的。)这是一个显着的差异,但并没有标志着急剧的分界线。如果有的话,它使Perl和Python与编译的语言更相似。
底线:是的,bash是一种解释的语言。或者,也许更确切地说,Bash是解释性语言的解释者。(" bash"的名称通常是指外壳/解释器,而不是它所解释的语言。)它与从一开始就设计用于脚本的其他解释语言有显着差异,但是这些差异不足以删除它来自"解释语言"的类别。
bash是根据GNU bash参考手册的解释器:
bash是GNU操作系统的外壳或命令语言解释器。
这个答案与基思·汤普森(Keith Thompson)的回答是互补的,我要留下直接的实际问题。
一般而言,我认为询问" good x是y的语言?"更有用的?"我们应该将X分类为y类型的语言?"而不是quot?"或&quot" x在多大程度上是一种语言?
即使没有Bash的任何更高级的脚本功能和"编程语言) - 语义,bash绝对是100%的语言,可能的命令行接口也是如此,实际上,每个接口,甚至是物理界面。它们可能是如此简单的语言,以至于您甚至没有任何机制来构建包含多个术语的表达式,但是我们绝对可以推荐它们,就好像它们是语言一样。机器做出反应的任何输入或操作都可以建模为该机器"识别"输入"令牌",就像有限状态自动机或图灵机器一样,并使用该识别来改变某种内部状态。"按下"在您停止按下时,一些机械按钮可能会永久切换其状态,而其他按钮可能需要您按下它们,而在您释放按钮时,无论其控制的内容都会再次恢复 - 他们会响应"释放"。以前的按钮忽略的输入。旋转组合锁可以识别串行中的某些输入;自行车锁正在等待并行识别某些输入(可以串行建模)。bash恰好是图灵完整的语言类别,因此,从任何客观的度量中,它都是"编程语言"。与众不同 - 我们唯一可以说的关于它的有趣的事情涉及其设计和人体工程学:' bash是一种语言;这只是一个真的 shat oth,因为它的语法和语义(评估规则)是不一致且不必要的复杂的,这是由于无能的结合而引起的,并试图做两个 wild the em>不同的事情具有相同的接口。现在,只要我们被迫居住在这款继承的创可贴和胶带塔中,我们都会被其笨拙的舌头诅咒。