什么是bash ?

Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等。

GNU/Linux 操作系统中的 /bin/sh 本是 bash (Bourne-Again Shell) 的符号链接,但鉴于 bash 过于复杂,有人把 bash 从 NetBSD 移植到 Linux 并更名为 dash (Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX标准。

Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。

就是这个倒霉的dash解释器使得我按照bash语法写的shell 脚本不能运行。

要知道自己的/bin/sh指向何种解释器,可以用 ls /bin/sh -al 命令查看:

$ ls /bin/sh -al

lrwxrwxrwx 1 root root 4 11月 16 15:33 /bin/sh -> bash

以上结果就表示当前系统用的是dash解释器。

切换到bash的方式其实挺简单的,关键是一直没找出这个原因……

修改默认的sh,可以采用命令sudo dpkg-reconfigure dash

注:dash 和 bash 语法上的主要的区别有:

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}

dash: 不支持, 替代方法:采用expr或cut外部命令代替

8. 大小写转换

bash: 支持${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))或者外部命令做计算

14. $((expression))

bash: 支持id++,id--,++id,--id这样到表达式

dash: 不支持++,--, 替代方法:id+=1,id-=1, id=id+1,id=id-1

Ubuntu 的 bash和dash的区别相关推荐

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

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

  2. bash 与 dash

    Ubuntu 的 bash和dash的区别       什么是bash ? Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上 ...

  3. ubuntu中bash,sh,./,bash区别

    当我们使用 sh test.sh .bash test.sh . ./test.sh 运行脚本都会使用一个新的shell环境来执行脚本内的命令, 当子进程完成后,子进程内的各项变量和操作将会结束而不会 ...

  4. linux bash 和 sh的区别

    Linux 中的 shell 有很多类型,其中最常用的几种是: Bourne shell (sh).C shell (csh) 和 Korn shell (ksh), 各有优缺点.Bourne she ...

  5. linux下的各种shell介绍(bash和dash转换)

    在linux下编写shell脚本文件时,经常会看到很多人在文件的第一行中标注"#!/bin/bash".这句话的意思是告诉系统强制用bash,避免出现一些不兼容的问题. 那么,在l ...

  6. shell脚本:sh、bash、dash的关系

    一.释义 #!/bin/bash指定脚本使用/bins/bash来解释执行,#!/bin/sh是指定此脚本使用/bin/sh来解释执行. #!是特殊的表示符,后面是脚本解释器程序路径,脚本的内容是由对 ...

  7. Linux bash 与 dash

    写这个是因为我在学习Linux时遇到如下情况:  1. echo -e "Hello world"   输出成  -e Hello world   (妈蛋!!!!!书上明明就可以的 ...

  8. Ubuntu 执行 bash 脚本异常

    Ubuntu 执行 bash 脚本异常 文章目录 Ubuntu 执行 bash 脚本异常 执行报错 解决办法 参考 执行报错 [dev@my-ubuntu ~/packages/base_server ...

  9. Ubuntu下默认使用dash而非bash

    今天在Ubuntu下调试代码,明明是正确的,却仍然报错,查了错误信息才知道:Ubuntu中默认不是bash,而是为了加快开机速度,使用了dash. dash中需要严格的语法,而且与bash语法不同.例 ...

最新文章

  1. IDEA Properties中文unicode转码问题
  2. Java基础知识:代理
  3. ECMA-335 (CLI) 标准 读书笔记——总结CLI类型系统(上)
  4. slope one 推荐算法python 代码_协同推荐算法实践之Slope One的介绍(转)
  5. unity可以直接转h5吗_瞎折腾:用Unity撸纯HTML5移动游戏/应用
  6. HDFS之存储优化纠删码原理、纠删码案例实操 、异构存储(冷热数据分离)
  7. 树莓派4B连接显示器 黑屏、左上角有光标问题
  8. 【工业互联网】工业互联网平台是什么、干什么用、谁来建、瓶颈有哪些、跨行业跨领域工业互联网平台怎么建?...
  9. 修复VSAN无法看到的主机磁盘
  10. 酒香还怕巷子深?如何打造一个优秀的GitHub开源项目
  11. 用python进行微信分析(带群发功能)
  12. 管理人员巡店用表-店长每日工作流程
  13. 大厂面经丨Nginx 面试 40 问
  14. python写入csv或excel时,数字0开头丢失的解决方案
  15. 研发质量管理的“红与黑”
  16. 牛逼了,利用Python实现“天眼系统”,只要照片就能了解个人信息
  17. Jenkins 中文设置(部分简体中文无效解决方法)
  18. oracle11g闪退 win7,win7 oracle11g
  19. QT 创建文件,文件夹
  20. 计算机休眠查询,可不可以查询电脑待机记录

热门文章

  1. Python怎么学?一定要掌握学习方法
  2. 太棒了!输入文本直接生成流程图
  3. 何恺明组又出神作!最新论文提出全景分割新方法
  4. CNN卷积神经网络分析
  5. 你听过算法也是可以贪心的吗?
  6. eigen库学习笔记(2)
  7. mysql json函数_Mysql里的JSON系列操作函数
  8. 差分隐私 python_[宜配屋]听图阁
  9. php+js实现异步图片上传,JavaScript实现异步图像上传功能
  10. wamp惯用的php框架_wamp集成环境php多版本搭建(php5.5,php5.6,php7.0.6)