bash和bash与dash的差别区别

3202人阅读
Linux(14)
有次我在写makfile时,用echo -e要显示带颜色的文字,命令如下:
echo -e &Full Version is:\033[31m\033[1m v1.0 \033[0m&;
该命令在控制台中单独执行都显示正常,效果如下:
Full Version is: v1.0
可以放在makefile中一运行, 结果把-e也显示出来:
-e Full Version is: v1.0
该问题折腾我许久,百思不解,寻谷歌,问度娘,终于明白其中缘由。这是由于不同的shell(一个是bash,一个是dash)造成的两种不同的结果,即在bash下正常,在dash下就多显示了一个-e。
从Ubuntu 6.10开始,默认使用的shell是dash,而不是bash,原因是dash更快、更高效,使用dash可以加快启动速度。
我们可以做如下实验来验证下,先启用bash运行下指令,在启用dash试试:
# /bin/bash
# echo -e &Full Version is:\033[31m\033[1m v1.0 \033[0m&;
Full Version is: v1.0
# /bin/dash
# echo -e &Full Version is:\033[31m\033[1m v1.0 \033[0m&;
-e Full Version is: v1.0
makefile用的是哪个shell
makefile用的shell默认是/bin/sh。但/bin/sh紧紧是个链接文件,到底用的是什么shell程序可以通过ls查看:
# ls -ls /bin/sh
0 lrwxrwxrwx 1 root root 4& 6月 20 2012 /bin/sh -& dash
而系统默认的shell可以通过系统环境变量SHELL查看,当前shell可以通$0查看:
# echo $SHELL
至此,在我的环境下,之所以会出现前面所述的问题,就是这个原因了:在makefile中用的是/bin/dash程序,而在控制台中用的是/bin/bash。
那makefile能不能显示的指定哪个shell程序来运行命令呢?答案肯定的。makefile本身有个环境变量也叫SHELL(跟系统环境变量SHELL同名,但不一样),我们可以在makefile中明确的给他赋值,以指明用哪个shell程序来解析命令。如SHELL = /bin/bash。
我在makefile最前面加上SHELL = /bin/bash,问题就解决了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:559341次
积分:4050
积分:4050
排名:第4851名
原创:57篇
转载:30篇
评论:105条
(1)(2)(1)(1)(2)(2)(1)(2)(2)(4)(1)(1)(3)(7)(3)(2)(2)(1)(9)(4)(4)(8)(1)(1)(1)(1)(3)(1)(1)(1)(2)(1)(1)(3)(1)(1)(1)(2)(3)(1)(1)DASH shell_百度百科
DASH shell
本词条缺少概述、名片图,补充相关内容使词条更完整,还能快速升级,赶紧来吧!
DASH shell简介
Dash Shell 是一个Unix Shell,比Bash Shell 小的多,符合POSIX标准。Debian曾经采用/bin/bash的更改/bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度。但是后来经过shell脚本测试存在运行问题。因为原先在bash shell 下可以运行的shell script (shell ),会出现一些意想不到的问题,不是100%的兼用。
Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell。
DASH shell解决办法
重新配置shell
1. sudo dpkg-reconfigure dash
选择NO,不使用Dash Shell。
2.采用链接指向
ln -s /bin/bash /bin/sh
检查是否正确:ls -l /bin/shbash和dash的区别_百度知道
bash和dash的区别
提问者采纳
Dash Shell 比 Bash Shell 小的多, id=id+1:支持{n. 数组bin/dev&#47:支持dash: 不支持,--Linux 操作系统缺省的 shell 是Bourne Again shell: 有内置命令&word。
GNU&#47: 不支持++; 常见用法 &gt, 可实现正则匹配等强大功能dash,替代方法,&word 2&gt,替代方法, 采用seq外部命令4; donebash.,符合POSIX标准;&1;Linux 操作系统中的 &#47. [[ 加强版testbash, 替代方法:可采用here documents5.定义函数 do command: 不支持. 进程替换&lt: 不支持:1;awk等外部命令转换9: 只支持=11,但功能相比bash要少很多,采用外部命令12:&16: 支持两者dash, 通过临时文件中转10, 替代方法;sed&#47,id-=1. 大小写转换bash,${parameter^^pattern}:不支持. $((expression))bash,它速度更快, 也支持((expression))方式sh 本是 bash (Bourne-Again Shell) 的符号链接: 支持C语言格式的for循环
expr3 )) ,替代方法, word不支持非数字. here stringbash:id+=1: dash中没有function这个关键字2, 替代方法,id--,采用$((expression))或者外部命令做计算14,,但鉴于 bash 过于复杂.select var in list,并且在Bourne shell 的基础上增加,${parameter,++id.m}展开dash: 支持[[ ]];bin&#47: 支持进程替换dash. let命令和((expression))bash: 支持${parameter^pattern},它是 Bourne shell 的扩展;null 2&gt,它主要是为了执行脚本而出现.10}bash,${parameter,语法严格遵守POSIX标准,pattern}, 替代方法,&#47: 不支持该格式的for, 替代方法,而不是交互: 当word为非数字时,有人把 ash 从 NetBSD 移植到 Linux 并更名为 dash (Debian Almquist Shell): 不支持[[ ]], 替代方法.:采用tr&#47, bash4支持关联数组dash,并建议将 &#47:支持here stringdash,与 Bourne shell 完全向后兼容. echo {0:采用while+read+case来实现3:不支持,用while+$((expression))实现13; expr2 :采用expr或cut外部命令代替8. &gt,这是一个不同于bash的(command)sh 指向它; donebash: 支持数组,简称 Bash:length};/ do list . [ string1 = string2 ] 和 [ string1 == string2 ]bash: &gt。Debian和Ubuntu中,--id这样到表达式dash,替代方法;sh默认已经指向bin&#47. 子字符串扩展bash, 替代方法;&word变成重定向标准错误和标准输出到文件worddash: &gt: function在bash中为关键字dash. for (( expr1 , 替代方法;(command),pattern}dash: 支持id++:不支持、增强了很多特性: 不支持,${parameter, &gt。语法上的主要的区别有;&word重定向标准输出和标准错误bash, 采用变量名+序号来实现类似的效果7:offset}dash: 不支持数组: 支持${parameter,以获得更快的脚本执行速度
来自团队:
其他类似问题
为您推荐:
dash的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 linux bash dash 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信