shell Bash是一种解释性语言吗?

kcwpcxri  于 2023-06-24  发布在  Shell
关注(0)|答案(3)|浏览(121)

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

然而,我在Wikipedia的解释语言页面上找不到bash的引用,或者在Google上进行广泛的搜索。我还在Programmers Stack Exchange上发现了a page,它似乎暗示bash不是一种解释型语言--如果不是,那它是什么?

pftdvrlh

pftdvrlh1#

Bash绝对是 * 解释 * 的;我不认为有任何合理的问题。
关于它是否是一种语言可能会有一些争议。它主要是为交互式使用而设计的,执行操作系统提供的命令。对于很多这种特殊的用法,如果您只是键入命令,如

echo hello

cp foo.txt bar.txt

很容易认为它“只是”用于执行简单的命令。从这个意义上说,它与Perl和Python等解释型语言完全不同,尽管它们可以交互式使用,但主要用于编写脚本(解释型程序)。
这种强调的一个结果是其设计针对交互式使用进行了优化。字符串不需要引号,大多数命令在输入后立即执行,您使用它执行的大多数操作将调用外部程序而不是内置功能,等等。
但正如我们所知,也可以使用bash编写脚本,bash有很多功能,特别是流控制结构,主要用于脚本(尽管它们也可以在命令行上使用)。
bash和许多脚本语言之间的另一个区别是bash脚本是按顺序读取、解析和执行的。bash脚本中间的语法错误在执行到达它之前不会被检测到。相比之下,Perl或Python脚本在执行开始之前就被完全解析了。(像eval这样的东西可以改变这一点,但一般的想法是有效的。)这是一个显著的差异,但它并不标志着一个明显的分界线。如果说有什么不同的话,那就是它使Perl和Python更类似于编译语言。
底线是:Bash是一种解释性语言。或者更准确地说,bash是一种解释型语言的解释器。(“bash”这个名字通常指的是shell/解释器,而不是它所解释的语言。)它与其他从一开始就为脚本设计的解释型语言有一些显著的区别,但这些区别不足以将它从“解释型语言”的类别中删除。

8qgya5xd

8qgya5xd2#

Bash是GNU Bash参考手册中描述的一个解释器:
Bash是GNU操作系统的shell或命令语言解释器。

6rvt4ljy

6rvt4ljy3#

这个答案是对Keith Thompson's answer的补充,我将直接的实际问题留给它。
总的来说,我认为问“X作为Y用途的语言有多好”更有用。我们应该把X归类为Y类型的语言吗?或者“X到底在多大程度上是一种语言?““.
即使没有任何Bash更高级的脚本功能和“类似编程语言”的语义,Bash也绝对是100%的语言,任何可能的命令行接口也是如此,每个接口都是如此,甚至是物理接口。它们可能是非常简单的语言,你甚至没有任何机制来构建一个包含多个术语的表达式,但我们绝对可以像语言一样对它们进行推理。机器对任何输入或动作做出React都可以被建模为该机器“识别”输入“令牌”,就像有限状态自动机或图灵机一样,并使用该识别来改变某种内部状态。“按下”一些机械按钮可能会在你停止按下它们之后永久地切换它们的状态,而其他按钮可能需要你按住它们,当你释放按钮时,它们控制的任何东西都会再次恢复-它们会响应“释放”输入,而前一个按钮会忽略它。旋转组合锁识别串行的某些输入;自行车锁等待并行地识别某些输入(其可以串行地建模)。Bash恰好属于图灵完备类语言,所以从任何客观的Angular 来看,它都是一种“编程语言”--我们唯一能说的有趣的事情就是它的设计和人体工程学:“用这种方式或那种方式做事有多容易?”“
Bash是一种语言;它只是一个 * 真的 * 狗屎,因为它的语法和语义(评估规则)是不一致的,不必要的复杂,这是由于无能和试图用同一个接口做两个 * 非常 * 不同的事情的结合。现在我们都被诅咒说它笨拙的舌头只要我们被迫居住在这个继承的创可贴和胶带的塔,这是现代计算堆栈。

相关问题