Bash 和 Python 编程语言优缺点分析

Bash 和 Python 是大多数自动化工程师最喜欢的编程语言。它们都各有优缺点,有时很难选择应该使用哪一个。所以,最诚实的答案是:这取决于任务、范围、背景和任务的复杂性。

让我们来比较一下这两种语言,以便更好地理解它们各自的优点。

Bash

  •  
  • 是一种 Linux/Unix shell 命令语言
  • 非常适合编写使用命令行界面(CLI)实用程序的 shell 脚本,利用一个命令的输出传递给另一个命令(管道),以及执行简单的任务(可以多达 100 行代码)
  • 可以按原样使用命令行命令和实用程序
  • 启动时间比 Python 快,但执行时性能差
  • Windows 中默认没有安装。你的脚本可能不会兼容多个操作系统,但是 Bash 是大多数 Linux/Unix 系统的默认 shell
  • 与其它 shell (如 csh、zsh、fish) 完全兼容。
  • 通过管道(|)传递 CLI 实用程序如 sed、awk、grep 等会降低其性能
  • 缺少很多函数、对象、数据结构和多线程支持,这限制了它在复杂脚本或编程中的使用
  • 缺少良好的调试工具和实用程序

Python

  • 是一种面对对象编程语言(OOP),因此它比 Bash 更加通用
  • 几乎可以用于任何任务
  • 适用于大多数操作系统,默认情况下它在大多数 Unix/Linux 系统中都有安装
  • 与伪代码非常相似
  • 具有简单、清晰、易于学习和阅读的语法
  • 拥有大量的库、文档以及一个活跃的社区
  • 提供比 Bash 更友好的错误处理特性
  • 有比 Bash 更好的调试工具和实用程序,这使得它在开发涉及到很多行代码的复杂软件应用程序时是一种很棒的语言
  • 应用程序(或脚本)可能包含许多第三方依赖项,这些依赖项必须在执行前安装
  • 对于简单任务,需要编写比 Bash 更多的代码

我希望这些列表能够让你更好地了解该使用哪种语言以及在何时使用它。

你在日常工作中更多会使用哪种语言,Bash 还是 Python?请在评论中分享。


via: https://opensource.com/article/19/4/bash-vs-python

作者:Archit Modi (Red Hat) 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

展开阅读全文

从小弟眼光分析几种编程语言优缺点

07-03

从java到c#然后再到c++,我似乎是从派生类学到了基类,我一直同意那种说法,说java和c#其实都是c++的派生。当然,c++并不是纯粹的面向对象的语言,但是也必须说是面向对象的先驱。rnrn 为什么我没有在学了java和c#之后就停止,而去学习了c++,因为我是一个控制欲比较强的人,对于java和c#人家什么都帮我们做好了,我有点无法忍受,但是也不可否认java和c#的强大。哦,对了,忘了说我为什么一直把java和C#放到一起,我个人认为这两种语言的相似程度达到百分之八十,也就是说学了其中一门另一门也就会了百分之八十。rnrn 至于外界一直传言的c#是抄袭java的,我不否认,因为java的创始人确实来到了微软而创造了c#,但是我也不全认同,如果你完全认同,那么我问你,c++/clr是什么?我个人认为他就是c++朝c#过渡的一门语言(其实按方法和难度确实可以算一门新的语言),也就是说c#未出现之前,微软已经有这方面的考虑了,那么c#的应运而生也就理所当然,至于为什么和java如此相像,那么我只能说,殊途同归,条条大路通罗马。也就像玄幻小说中说的,无论你修仙还是修魔,还是练体,最终都是朝一个大道去的。rnrn 下面我来分析下,这两种半面向对象语言吧(c++算半种)。当然,大家都知道面向对象的三大特点:继承,封装,和多肽。当然这三种语言都存在继承,但是也不尽相同,vc++的继承为多继承,而java(后文只说java就不提c#了)是单继承和接口一起实现的。接口其实是一种变态的继承,也是面向对象语言发展的一种必然产物,其实本人对于是否应该存在多继承无所谓。rnrn sun公司(现在为Oracle公司)为什么摒弃了这种多继承,大家都知道,派生类的实现是先从基类开始的,一个类定义了一个实体,那么将在内存中加载所有的基类,并且对于开发人员来说,比较复杂,所以sun公司就放弃了多继承而实现了接口。但是在这里我想问一下,为什么要有接口,因为他要实现这种功能,那么我觉得既然你要实现这种功能,那么何必在意是接口还是多继承,因为你要实现,就必须要实现这个借口,或者继承这个基类,c++程序员不会疯了没有要用这个方法或变量而继承基类。难道真的是为了效率考虑?既然是为了效率考虑,那么你为什么要放弃宏和指针?宏的好处是什么?这里简短说下,程序调用方法,必须要从程序所在的内存空间转移到函数所在的内存空间执行完后再回到程序所在的内存空间继续执行,在这期间,要求在转移前保留现场,并记录,从内存空间的开辟和时间方面的开销来说宏更占有优势。rnrn 现在说下接口,个人认为接口是一种特殊并且简单的抽象类,是不用使用abstract的抽象类,当然java和c++的抽象类都不能创建对象。c++中的抽象类是怎么形成的,是因为该类中有纯虚函数,那么虚函数是什么?虚函数和一般函数一样是可以实现的,即有双大括号"",如 virtual output(),子类可以覆盖这个函数,java中叫重写(override)。那么为什么要有虚函数,方便子类指针调用该类覆盖的函数(有点拗口,大家懂吧?)。那么怎样形成抽象类,即有纯虚函数,纯虚函数即没有实现的函数如virtual output()=0;这样写。c++和java中抽象类的子类都必须实现该纯虚函数。但是c++中抽象类可以有非纯虚函数和一般函数,java中抽象类必须全部是纯虚函数。在这方面java就没有c++强大,便于掌控。rnrn 说了这么多,最后再说一下如果真的要说效率这三个语言还是c++效率最高,说方便c#最方便,但是java功能要比c#强大,各有优点吧。rnrn 像微软从c到c++到vc/mfc到vc/clr到c#这个从面向过程语言到面向对象语言转变的过程中,我最无法理解的就是clr,说效率没有c++高,说方便也赶不上c#,个人认为是微软为了实现.net计划硬加上去的(当然他也有他的好处)。我只能说按照我的想法c++如果难度是10,那么java是5,c#是4.5,clr我认为是15。难学不讨好啊。rnrn 好了,小弟对于这些语言还不能说精通,只能说会用,还要继续学习,我相信只要不是语言的创始者,都不能说自己是精通的。rnrn 最后再阐明一下小弟的观点,重要的是思想,而不是实现思想的工具,还是那句话,殊途同归,条条大路通罗马,不管你是修仙,还是修魔,甚至是练体... ...rn 论坛

没有更多推荐了,返回首页