【Linux Shell】你知道bash shell和dash shell的区别吗?
最近在工作中遇到一个很奇葩的问题,就是一个嵌入式的SDK编译,它里面执行shell命令的时候,使用的dash shell来解析,而通常我们默认用的是bash shell来解析;我按照bash shell那样照常编写脚本,大部分的脚本是没有问题的,但是偏偏就被我遇到了不一样的地方,以此文记录下。
先说下bash shell与bash shell的关系。
什么是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的简化版本,没有支持那么复杂的东西。
再看下我遇到的问题,为了好做对比,我分别写了1个脚本,分别用bash和dash去解析运行,得出不同的答案。
脚本内容如下:
result=1234
if [[ "$result" == "1234" ]]; then
echo "yes"
else
echo "no"
fi
if [ "$result" == "1234" ]; then
echo "yes"
else
echo "no"
fi
if [[ "$result" = "1234" ]]; then
echo "yes"
else
echo "no"
fi
if [ "$result" = "1234" ]; then
echo "yes"
else
echo "no"
fi
OK,脚本对应的行号如下所示:
使用/bin/bash运行,一切正常,输出4个yes。
使用/bin/dash运行,只有一个输出正常,3处报错!!!
为何???
原来,dash是很奇葩的:
- if 里面的条件语句只能使用 [ ] 不能使用 [[ ]];
- 字符串判断,只能使用 = 不能使用 ==;
word天呐!!就是这么回事。
我们还可以使用 ls -al /bin/sh查看下系统默认的shell解析器是什么,如下:
至于 [ ] 与 [[ ]] 的区别,可以参考这篇文章:Linux Shell 中的 ()、(())、[]、[[]]、{} 怎么用是不是还傻傻分不清?
== 可用于判断变量是否相等,= 除了可用于判断变量是否相等外,还可以表示赋值。
= 与 == 在 [ ] 中表示判断(字符串比较)时是等价的。
今天的总结就介绍到这,有什么问题,欢迎你在评论区告诉我。
相关文章
- Linux通配符和正则表达式通配符 区别_linux正则表达式语法
- 比较UCOS与Linux操作系统(ucos与linux)
- 掌握Linux:学习常用Shell命令(linux常用shell命令)
- 系统中如何安装和使用shell编程在KSH Linux系统中安装与使用Shell编程的指南(kshlinux)
- 脚本Linux下重启Shell脚本实现方法(linux重启shell)
- Shell脚本为Linux带来无限可能(shell脚本linux)
- 和web服务器比较Linux与Web服务器的区别(怎么分辨linux)
- 李明学习Linux: 一个IT之旅(李明linux)
- 深度剖析: Linux 版本间的差异(linux版本区别)
- Linux 分割:解决Shell脚本必要之处(linux分割)
- 自学Linux指南:走上突破技能新高度(怎么自学linux)
- Linux查看所有命令的简易方法(linux显示所有命令)
- 深入探索Linux下Shell的设置(linux设置shell)
- 黑苹果和Linux的区别和联系(黑苹果linux)
- 利用Linux过滤IP,保障网络安全(linux过滤ip)
- Linux中的括号:探秘bash shell编程中的圆括号、花括号、方括号和尖括号。(linux中的括号)
- 精通Linux: 学习最常用的命令(linux通用命令)
- 比较不同Linux系统的特点与优势(各种linux系统区别)
- Mastering Linux: The Ultimate Guide to Connecting to Your System with Shell(shell连接linux)
- Linux 中最常用的Shell:为你提供便捷生活(linux常用shell)
- Linux 自动挂盘:一步到位操作(linux自动挂盘)
- 脚本快速学习执行Linux Shell脚本的技巧(linux 执行shell)
- linux之美——Shell带来的新体验(linux的 shell)
- Linux开源软件:开启自由之门(linux开源软件)
- 脚本Linux 中的 Shell 脚本:智能化自动化的提速器(linux中 shell)