作为一名shell(sh/bash)用户和编程语言爱好者,我说说自己的体会吧。
shell作为一门编程语言,和其它编程语言一样,有自己所擅长的问题领域。至少目前来看,还没有哪一门编程语言适合解决所有的问题。正如一个设计原则所说:If it is good for everything, it is good for nothing. 当我们说一门编程语言适合解决某类问题时,我们实际想要表达的是,使用这门语言,可以在最短的时间内获得一个性能,可读性和可维护性等各方面都可接受的程序。而做到这一点的关键是,这门编程语言必须在这类特定问题上,有前期的经验积累。这些经验会以数据结构或库的形式体现出来。一些激进的语言设计,甚至会将这些经验,以词法糖的方式嵌入到语言中。最终的效果是,使用一门语言解决他所擅长的问题时,只需要借鉴一个现成的思路,在他的基础上进行极少的创新,然后编写很少的代码就可以完成。本质是,当你在使用一门语言解决它所擅长的问题时,你实际是站在了这个语言以前的无数个使用者的经验基础之上。
shell这门编程语言,最初设计时就是为了方便系统管理工作。所以,他在语法和数据结构上,针对系统管理工作中遇到的常见问题,进行了特殊的优化。例如,系统管理时要运行很多现有的程序,因而shell通过命令查找规则,将内部命令和外部程序融合在了一起,不做区分;再比如,系统管理时经常要将处理结果临时保存,因而shell在语法上支持重定向功能,可以将一个程序的标准输出直接存储到文件中;再比如,系统管理时,一个程序的运行结果往往会作为另一个程序的输入数据,因而shell在语法上支持管道操作;再比如,系统管理时,数据都是以字符串形式表示的,因而shell在语法上支持大量的字符串操作,包括通配、正则表达式等等。所有的这些,达到的最终效果是,使用shell语言编写系统管理的脚本时,好想,好写,好调试,最终的程序短小精悍。个人认为,shell语言的最大魅力还是体现在命令行上。简单,直接,用一行命令,将现有的程序拼接在一起,就可以完成工作。而同样的工作,如果用其它的编程语言,就可能需要几百行。
而如果用shell语言来完成其他工作呢?它天生就不是干这个的。用shell语言做数值运算?抱歉,性能不够。用shell语言实现复杂算法?抱歉,除了字符串和简单的数组,没有其它的数据结构了。用shell语言编写大规模的程序?可能Java语言更合适一些。
Perl语言,据Perl作者的介绍,是shell语言的加强版,改进了很多shell语言原有的缺点。个人认为,如果学习shell语言的过程可以比作是捡贝壳的话,那么学习Perl语言的过程就是筛沙子,整个海滩的沙子。
历史是很多偶然因素造就的。语言本身的设计只是它兴盛和衰亡背后的一个因素。
目前有 12 条留言 访客:11 条, 博主:0 条 ,引用: 1 条
外部的引用: 1 条
- 为什么只有python成了胶水语言? | 求索阁
Python 的地位并不是天然形成的。这个领域的竞争者前有 tcl/perl,后有 lua/ruby。但 tcl 功能有限;
perl 的主要问题是作者开发 Perl6 花了太多时间,导致语言一直得不到更新;
Ruby 因为 Rails 很流行,社区的主要精力都放到 Web 开发了。
Python 则一直以来步伐都很稳健,不仅社区足够活跃,各大公司也愿意主动支持它,这是历史选择的结果。但只有 Python 是胶水语言这个结论也是不太合适的。
比如在运维领域,Ansible 等选择了Python,而 Chef/Puppet 则选择了 Ruby。OpenResty 主要支持 lua。所以其他语言也还是有用武之地的,只是没有 Python 那么广泛。