Ubuntu 的 bash和dash的区别
什么是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的区别相关推荐
- Ubuntu系统下bash和dash的区别(修改默认sh为bash)
什么是bash ? Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上用的Shell,像tcsh.csh.ash.bsh.ks ...
- bash 与 dash
Ubuntu 的 bash和dash的区别 什么是bash ? Bash(GNU Bourne-Again Shell)是许多Linux平台的内定Shell,事实上,还有许多传统UNIX上 ...
- ubuntu中bash,sh,./,bash区别
当我们使用 sh test.sh .bash test.sh . ./test.sh 运行脚本都会使用一个新的shell环境来执行脚本内的命令, 当子进程完成后,子进程内的各项变量和操作将会结束而不会 ...
- linux bash 和 sh的区别
Linux 中的 shell 有很多类型,其中最常用的几种是: Bourne shell (sh).C shell (csh) 和 Korn shell (ksh), 各有优缺点.Bourne she ...
- linux下的各种shell介绍(bash和dash转换)
在linux下编写shell脚本文件时,经常会看到很多人在文件的第一行中标注"#!/bin/bash".这句话的意思是告诉系统强制用bash,避免出现一些不兼容的问题. 那么,在l ...
- shell脚本:sh、bash、dash的关系
一.释义 #!/bin/bash指定脚本使用/bins/bash来解释执行,#!/bin/sh是指定此脚本使用/bin/sh来解释执行. #!是特殊的表示符,后面是脚本解释器程序路径,脚本的内容是由对 ...
- Linux bash 与 dash
写这个是因为我在学习Linux时遇到如下情况: 1. echo -e "Hello world" 输出成 -e Hello world (妈蛋!!!!!书上明明就可以的 ...
- Ubuntu 执行 bash 脚本异常
Ubuntu 执行 bash 脚本异常 文章目录 Ubuntu 执行 bash 脚本异常 执行报错 解决办法 参考 执行报错 [dev@my-ubuntu ~/packages/base_server ...
- Ubuntu下默认使用dash而非bash
今天在Ubuntu下调试代码,明明是正确的,却仍然报错,查了错误信息才知道:Ubuntu中默认不是bash,而是为了加快开机速度,使用了dash. dash中需要严格的语法,而且与bash语法不同.例 ...
最新文章
- IDEA Properties中文unicode转码问题
- Java基础知识:代理
- ECMA-335 (CLI) 标准 读书笔记——总结CLI类型系统(上)
- slope one 推荐算法python 代码_协同推荐算法实践之Slope One的介绍(转)
- unity可以直接转h5吗_瞎折腾:用Unity撸纯HTML5移动游戏/应用
- HDFS之存储优化纠删码原理、纠删码案例实操 、异构存储(冷热数据分离)
- 树莓派4B连接显示器 黑屏、左上角有光标问题
- 【工业互联网】工业互联网平台是什么、干什么用、谁来建、瓶颈有哪些、跨行业跨领域工业互联网平台怎么建?...
- 修复VSAN无法看到的主机磁盘
- 酒香还怕巷子深?如何打造一个优秀的GitHub开源项目
- 用python进行微信分析(带群发功能)
- 管理人员巡店用表-店长每日工作流程
- 大厂面经丨Nginx 面试 40 问
- python写入csv或excel时,数字0开头丢失的解决方案
- 研发质量管理的“红与黑”
- 牛逼了,利用Python实现“天眼系统”,只要照片就能了解个人信息
- Jenkins 中文设置(部分简体中文无效解决方法)
- oracle11g闪退 win7,win7 oracle11g
- QT 创建文件,文件夹
- 计算机休眠查询,可不可以查询电脑待机记录
热门文章
- Python怎么学?一定要掌握学习方法
- 太棒了!输入文本直接生成流程图
- 何恺明组又出神作!最新论文提出全景分割新方法
- CNN卷积神经网络分析
- 你听过算法也是可以贪心的吗?
- eigen库学习笔记(2)
- mysql json函数_Mysql里的JSON系列操作函数
- 差分隐私 python_[宜配屋]听图阁
- php+js实现异步图片上传,JavaScript实现异步图像上传功能
- wamp惯用的php框架_wamp集成环境php多版本搭建(php5.5,php5.6,php7.0.6)