原文链接,转载请注明出处: http://www.happycxz.com/m/?p=137

常见shell类型

Bourne shell (sh)

UNIX 最初使用,且在每种 UNIX 上都可以使用。
在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。

C shell (csh)

csh, the C shell, is a command interpreter with a syntax similar to the C programming language.
一个语法上接近于C语言的shell。

Korn shell (ksh)

完全向上兼容 Bourne shell 并包含了 C shell 的很多特性。

Bourne Again shell (bash)

Linux 操作系统缺省的 shell。
是 Bourne shell 的扩展,与 Bourne shell 完全向后兼容。
在Bourne shell 的基础上增加、增强了很多特性。
可以提供如命令补全、命令编辑和命令历史表等功能。
包含了很多 C shell 和 Korn shell 中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

Debian Almquist Shell(dash)

原来bash是GNU/Linux 操作系统中的 /bin/sh 的符号连接,但由于bash过于复杂,有人把 bash 从 NetBSD 移植到 Linux 并更名为 dash,且/bin/sh符号连接到dash。
Dash Shell 比 Bash Shell 小的多(ubuntu16.04上,bash大概1M,dash只有150K),符合POSIX标准。
Ubuntu 6.10开始默认是Dash。

规范和建议

标记为 “#!/bin/sh” 的脚本不应使用任何 POSIX 没有规定的特性 (如 let 等命令, 但 “#!/bin/bash” 可以)。
bash支持的写法比dash(ubuntu中的sh)多很多。
想要支持 sh xx.sh 运行的,必须遵照 POSIX 规范去写。
想要脚本写法多样化,不需要考虑效率的,可以将文件头定义为 #!/bin/bash , 而且不要使用 sh xx.sh 这种运行方式。

bash和dash区别

语法上的主要的区别有:
1. 定义函数
bash: function在bash中为关键字
dash: dash中没有function这个关键字
2. select var in list; do command; done
bash:支持
dash:不支持, 替代方法:采用while+read+case来实现
3. echo {0..10}
bash:支持{n..m}展开
dash:不支持,替代方法, 采用seq外部命令
4. here string
bash:支持here string
dash:不支持, 替代方法:可采用here documents
5. >&word重定向标准输出和标准错误
bash: 当word为非数字时,>&word变成重定向标准错误和标准输出到文件word
dash: >&word, word不支持非数字, 替代方法: >word 2>&1; 常见用法 >/dev/null 2>&1
6. 数组
bash: 支持数组, bash4支持关联数组
dash: 不支持数组,替代方法, 采用变量名+序号来实现类似的效果
7. 子字符串扩展
bash: 支持parameter:offset:length,{parameter:offset:length},{parameter:offset}
dash: 不支持, 替代方法:采用expr或cut外部命令代替
8. 大小写转换
bash: 支持parameterpattern,{parameter^pattern},{parameter^^pattern},parameter,pattern,{parameter,pattern},{parameter,,pattern}
dash: 不支持,替代方法:采用tr/sed/awk等外部命令转换
9. 进程替换<(command), >(command)
bash: 支持进程替换
dash: 不支持, 替代方法, 通过临时文件中转
10. [ string1 = string2 ] 和 [ string1 == string2 ]
bash: 支持两者
dash: 只支持=
11. [[ 加强版test
bash: 支持[[ ]], 可实现正则匹配等强大功能
dash: 不支持[[ ]], 替代方法,采用外部命令
12. for (( expr1 ; expr2 ; expr3 )) ; do list ; done
bash: 支持C语言格式的for循环
dash: 不支持该格式的for, 替代方法,用while+((expression))实现13.let命令和((expression))bash:有内置命令let,也支持((expression))方式dash:不支持,替代方法,采用((expression))实现 13. let命令和((expression)) bash: 有内置命令let, 也支持((expression))方式 dash: 不支持,替代方法,采用((expression))或者外部命令做计算
14. $((expression))
bash: 支持id++,id–,++id,–id这样到表达式
dash: 不支持++,–, 替代方法:id+=1,id-=1, id=id+1,id=id-1
15. 其它常用命令
bash: 支持 echo -e, 支持 declare
dash: 不支持。

参考

https://zhidao.baidu.com/question/489742760031792892.html
http://blog.chinaunix.net/uid-27037833-id-3431985.html

bash, sh, dash 傻傻分不清楚相关推荐

  1. 科普 | Shell中傻傻分不清楚的TOP3

    近来小姐姐又犯憨憨错误,问组内小伙伴export命令不会持久化环境变量吗?反正我是问出口了..然后小伙伴就甩给了我一个<The Linux Command Line>PDF链接.感谢老大不 ...

  2. JS魔法堂:属性、特性,傻傻分不清楚

    一.前言 或许你和我一样都曾经被下面的代码所困扰 var el = document.getElementById('dummy'); el.hello = "test"; con ...

  3. ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[下篇]

    关于ASP.NET MVC对请求的处理方式(同步或者异步)涉及到的五个组件,在<上篇>中我们谈了三个(MvcHandler.Controller和ActionInvoker),现在我们来谈 ...

  4. 国家电网和南方电网还傻傻分不清?

    参看:都2020年了,国家电网和南方电网还傻傻分不清? 一.名称不同 一个叫南方电网,一个叫国家电力电网,虽然都是电网,但是区别还是很大的 而且成立时间不一样:国家电力电网有限公司成立于2002年12 ...

  5. cdn厂商 同兴万点_同兴万点:TXNetworks和CDNetworks让我们傻傻分不清

    原标题:同兴万点:TXNetworks和CDNetworks让我们傻傻分不清 在2008年2月25日成立的同兴万点,公司全称为同兴万点(北京)网络技术有限公司(TXNetworks),一直专注于CDN ...

  6. Ubuntu系统下bash和dash的区别(修改默认sh为bash)

    什么是bash ? Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh.csh.ash.bsh.ks ...

  7. 2021年了,`IEnumerator`、`IEnumerable`接口还傻傻分不清楚?

    IEnumerator.IEnumerable这两个接口单词相近.含义相关,傻傻分不清楚. 入行多年,一直没有系统性梳理这对李逵李鬼. 最近本人在怼着why神的<其实吧,LRU也就那么回事> ...

  8. 动态ram依靠什么存储信息_ROM、RAM、DRAM、SRAM和FLASH傻傻分不清

    ROM.RAM.DRAM.SRAM和FLASH各类储存器在电脑.手机.电子设备.嵌入式设备及相应的开发中普遍应用的,但是很多还是傻傻分不清楚.下面就简单介绍下这几个吧! ROM和RAM ROM:只读存 ...

  9. Executor 与 ExecutorService 和 Executors 傻傻分不清

    转载自  Executor 与 ExecutorService 和 Executors 傻傻分不清 java.util.concurrent.Executor, java.util.concurren ...

  10. HashMap中傻傻分不清楚的那些概念

    转载自 HashMap中傻傻分不清楚的那些概念 很多人在通过阅读源码的方式学习Java,这是个很好的方式.而JDK的源码自然是首选.在JDK的众多类中,我觉得HashMap及其相关的类是设计的比较好的 ...

最新文章

  1. 关于Eclipse平台的使用和开发第一个SWT程序
  2. CentOS 7系统关闭yum自动下载更新
  3. 本地化中文示例代码需求调查
  4. jieba库的使用和好看的词元
  5. 机器学习部分国内牛人
  6. drawLine()方法画粗线
  7. 汪琪玩Excel:只复制可见单元格
  8. 傲梅分区助手克隆Linux硬盘,傲梅分区助手如何复制磁盘?分区助手克隆磁盘的具体教程...
  9. android 5.1 屏蔽MENU键 返回键唤醒系统
  10. BestSync多终端文件资料同步利器
  11. Android设置状态栏的字体颜色
  12. 计算机d盘无法格式化,电脑D盘无法格式化怎么办
  13. 类似 毕克BYK354流平剂 荟研 溶剂型体系 润湿流平
  14. k8s使用 ceph rbd 模式 踩坑
  15. 计算机用户被锁定如何解除,计算机被锁定怎样解除?用户受限又怎样解除?
  16. 【408】计算机网络第一轮强化笔记
  17. United Plugins发布TrapTune人声插件
  18. java基于springboot的高校学报论文在线投稿系统
  19. 一道很有意思的面试题目,快加入到这场头脑风暴游戏里吧~
  20. 3.3 锚框 or 先验框

热门文章

  1. 前端实现在线预览文档(pdf、doc文件)
  2. 防骗指南-QQ微信仿冒诈骗
  3. 剁手节致敬!听当年的老人讲述阿帕网(互联网前身)诞生的故事
  4. 【微生物相关数据库】NAR database issue
  5. chipsel语言_英语快速记忆法视频
  6. module java.base does not “opens java.lang“ to module spring.core
  7. CutefishOS 0.6 Beta 发布
  8. 制作世界人口地图json--10.4学习日记
  9. 学python要有多少英语词汇量_英文总共20万个词汇量!学好英文,到底要背多少单词才够用?...
  10. 重温Spring笔记3 - 依赖注入