Jam*_* Ko 14 bash shell scripting-language interpreted-language compiled-language
从我到目前为止所读到的,bash似乎符合解释语言的定义:
echo foo
调用预编译的可执行文件)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 /解释器而不是它所解释的语言.)它与从脚本开始设计的其他解释语言有一些显着差异,但这些差异不足以删除它来自"解释语言"的范畴.