我的编程空间,编程开发者的网络收藏夹
学习永远不晚

bash shell和dash shell的区别详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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,脚本对应的行号如下所示:

bash shell和dash shell的区别详解

使用/bin/bash运行,一切正常,输出4个yes

bash shell和dash shell的区别详解

使用/bin/dash运行,只有一个输出正常,3处报错!!!

bash shell和dash shell的区别详解

 为何???

原来,dash是很奇葩的:

  • if 里面的条件语句只能使用 [ ] 不能使用 [[ ]];
  • 字符串判断,只能使用 = 不能使用 ==;

word天呐!!就是这么回事。

我们还可以使用 ls -al /bin/sh查看下系统默认的shell解析器是什么,如下: 

bash shell和dash shell的区别详解

至于 [ ] 与 [[ ]] 的区别,可以参考这篇文章:linux shell 中的 ()、(())、[]、[[]]、{} 怎么用是不是还傻傻分不清?

== 可用于判断变量是否相等,= 除了可用于判断变量是否相等外,还可以表示赋值。

= 与 == 在 [ ] 中表示判断(字符串比较)时是等价的。

到此这篇关于bash shell和dash shell的区别详解的文章就介绍到这了,更多相关bash shell和dash shell内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

bash shell和dash shell的区别详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

bash shell和dash shell的区别详解

最近在工作中遇到一个很奇葩的问题,就是一个嵌入式的SDK编译,它里面执行shell命令的时候,使用的dash 编程shell来解析,而通常我们默认用的是bajssh shell来解析;我按照bash shell那样照常编写脚本,大部分的脚本
2023-05-06

详解Shell $*和$@之间的区别

$* 和 $@ 都表示传递给函数或脚本的所有参数,我们已在《Shell特殊变量》一节中进行了演示,本节重点说一下它们之间的区别。 当 $* 和 $@ 不被双引号" "包围时,它们之间没有任何区别,都是将接收到的每个参数看做一份数据,彼此之间
2022-06-04

csh,tcsh,bash,sh等shell的区别

出自bash的faq,仔细看看。顺便翻译学习一下。 Section C: Differences from other Unix shellsC:跟其他UNIX shells脚本的区别C1) How does bash differ fro
2022-06-04

详解shell数组${arr[*]}和${arr[@]}区别

引用数组中所有元素时${arr[*]}和${arr[@]}是有细微区别的 Example: #!/bin/sh function showarr(){arr=$1for b in ${arr[*]};doecho $bdonereturn
2023-05-12

linux shell中“.” 和 “./”执行的区别详解

目前注意到的区别主要在于环境变量的作用域上: 1. 如果使用" ./ " 执行,可以理解为程序运行在一个全新的shell中,不继承当前shell的环境变量的值, 同时若在程序中改变了当前shell中的环境变量(不使用export),则当前s
2022-06-04

Shell中exit和return的区别讲解

1.exit命令 exit命令是Shell内建命令,用于退出当前Shell进程。使用格式如下:exit []可以指定退出状态n,n的取值范围是0-255,一般情况下,0表示正常退出,非零表示异常退出。如果状态码是0-255之外的数值,
2022-06-04

csh,tcsh,bash,sh等shell的区别是什么

本篇内容主要讲解“csh,tcsh,bash,sh等shell的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“csh,tcsh,bash,sh等shell的区别是什么”吧!出自bash
2023-06-09

Linux bash Shell中的变量类型详解

在Linux系统中进行日常运维或者是编写脚本时,变量是再熟悉不过的了,但这些变量都有哪些类型,具体的用法又有哪些差异呢?本文整理分享给大家: 一、bash变量类型: 本地变量 局部变量 环境变量 位置变量 特殊变量(内置) 二、本地变量:
2022-06-04

shell(bash)下“time” 命令的输出详解

前言 相信大家都知道bash下time是一个很有用的命令,它可以为一段脚本或一个程序的执行计时,这通常在粗略比较程序执行效率的时候很方便。但是你会发现,time命令输出的时间文字不能被简单地重定向,例如重定向至一个文本文件,只能显示在屏幕上
2022-06-04

PHP 函数和 Shell 函数的区别

php 函数和 shell 函数的主要区别在于安全性(php 函数更安全)、可靠性(shell 函数因操作系统而异)、功能(shell 函数更强大但受 shell 限制)、性能(php 函数通常更快)和复杂性(shell 函数更复杂)。它们
PHP 函数和 Shell 函数的区别
2024-04-24

Shell中exit和return的区别有哪些

这篇文章主要介绍了Shell中exit和return的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.exit命令exit命令是Shell内建命令,用于退出当前S
2023-06-09

Shell编程中while与for的区别及用法详解

在shell编程中经常用到循环,常用的循环有for和while循环两种。while循环默认以行读取文件,而for循环以空格读取文件切分文件,本篇就结合现网的一些使用示例说说二者的用法和区别。 一、常用语法 1、for循环 for循环常用的语
2022-06-04

Linux shell脚本开头#!/bin/bash和#!/bin/sh分析与区别是什么

Linux shell脚本开头#!/bin/bash和#!/bin/sh分析与区别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。很多人都误以为Linux中shell脚
2023-06-28

shell中的 反引号、$()和${}有什么区别

这篇文章主要介绍shell中的 反引号、$()和${}有什么区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.反引号与$()用于命令替换反引号和$()的作用相同,用于命令替换(command substituti
2023-06-09

linux shell中“.” 和 “./”执行的区别有哪些

这篇文章将为大家详细讲解有关linux shell中“.” 和 “./”执行的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是Linux系统Linux是一种免费使用和自由传播的类UNIX操作
2023-06-09

基于shell的if和else详解

基本语法 shell的if语法和C语言等高级语言非常相似,唯一需要注意的地方就是shell的if语句对空格方面的要求比较严格(其实shell对所有语法的空格使用都比较严格),如果在需要空格的地方没有打上空格,都会报错。如if [ $1x =
2022-06-04

SHELL中的exit 0 和 exit 1有什么区别

在SHELL脚本中,exit 0和exit 1是用来表示命令或脚本的执行状态的两个特定的退出码。这两个退出码有以下区别:1. exit 0:表示命令或脚本成功执行并且没有错误发生。通常情况下,0被认为是成功的退出码。2. exit 1:表示
2023-09-16

shell中的exit 0和exit 1的区别是什么

在shell中,exit 0和exit 1是退出命令(exit command)。它们用于在脚本执行过程中,指示脚本的退出状态。- exit 0:表示脚本成功执行并且没有出现任何错误。它通常用于表明脚本的正常结束。- exit 1:表示脚本
2023-09-21

编程热搜

目录