linux中的sh、dash、bash的历史及语法区别

dash与bash dash与bash背景dash与bash的区别shell配置错误的可能特征坑!!!查看shell真实配置切换 背景 平台Linux编译,可能会遇到脚本设置类型不同(如:芯片原厂bash而你的ubuntu默认是dash),导致使用和预期不一致的情况(如tftp烧写失败)。 dash与bash的区别 从Ubuntu 6.10开始,默认使用dash(theDebian Almquist Shell)而不是bash(the GNUBourne-Again Shell). 但Login Shell还是bash. 原因 阅读详情

1. linux中的sh、dash、bash的历史及语法区别

1.1. 常见shell类型

cat /etc/shells
/bin/sh
/bin/bash
/bin/rbash
/bin/dash
/bin/zsh

Bash脚本进阶指南

1.1.1. sh(Bourne shell)

  • UNIX 最初使用,且在每种 UNIX 上都可以使用。
  • 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。

1.1.2. csh(C shell)

  • csh, the C shell, is a command interpreter with a syntax similar to the C programming language.
  • 一个语法上接近于C语言的shell。

1.1.3. ksh(Korn shell)

完全向上兼容 Bourne shell 并包含了 C shell 的很多特性。

1.1.4. bash(Bourne Again shell)

  • bash 是 Bourne shell 的扩展,与 Bourne shell 完全向后兼容。
  • 在 Bourne shell 的基础上增加、增强了很多特性。
  • 可以提供如命令补全、命令编辑和命令历史表等功能。
  • 包含了很多 C shell 和 Korn shell 中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

1.1.5. dash(Debian Almquist Shell)

  • 原来 bash 是 GNU/Linux 操作系统中的 /bin/sh 的符号连接,但由于 bash 过于复杂,有人把 bash 从 NetBSD 移植到 Linux 并更名为 dash,且 /bin/sh 符号连接到 dash
  • Dash Shell 比 Bash Shell 小的多(ubuntu16.04上,bash 大概1M,dash 只有150K),符合 POSIX 标准。
  • Ubuntu 6.10 开始默认是 Dash。

1.2. 规范和建议

  • 标记为 #!/bin/sh 的脚本不应使用任何 POSIX 没有规定的特性 (如 let 等命令, 但 #!/bin/bash 可以)
  • bash 支持的写法比 dash(ubuntu中的sh)多很多
  • 想要支持 sh xx.sh 运行的,必须遵照 POSIX 规范去写
  • 想要脚本写法多样化,不需要考虑效率的,可以将文件头定义为 #!/bin/bash , 而且不要使用 sh xx.sh 这种运行方式

1.3. bash比dash多的语法如下

1.3.1. function

bash: function 在 bash 中为关键字
dash: dash 中没有 function 这个关键字

1.3.2. select循环

select var in list; do command; done

bash:支持
dash:不支持, 替代方法:采用while+read+case来实现

1.3.3. echo展开

echo {0..10}
bash:支持{n…m}展开
dash:不支持,替代方法, 采用seq外部命令

1.3.4. here string

A here string can be considered as a stripped-down form of a here document.
It consists of nothing more than COMMAND <<< $WORD,
where $WORD is expanded and fed to the stdin of COMMAND.

bash:支持here string
dash:不支持, 替代方法:可采用here documents

1.3.5. 重定向

>&word 重定向到文件word,bash支持

bash: 当word为非数字时,>&word变成重定向标准错误和标准输出到文件word
dash: >&word, word不支持非数字, 替代方法: >word 2>&1; 常见用法 >/dev/null 2>&1

1.3.6. 数组

bash: 支持数组, bash4支持关联数组
dash: 不支持数组,替代方法, 采用变量名+序号来实现类似的效果

1.3.7. 子字符串扩展

bash: 支持parameter:offset:length,parameter:offset:length,{parameter:offset}
dash: 不支持, 替代方法:采用expr或cut外部命令代替

1.3.8. 大小写转换

bash: 支持 parameterpattern,parameterpattern,{parameter^^pattern},parameter,pattern,parameter,pattern,{parameter,pattern}
dash: 不支持,替代方法:采用 tr/sed/awk 等外部命令转换

1.3.9. 进程替换

https://linuxstory.gitbook.io/advanced-bash-scripting-guide-in-chinese/zheng-wen/part5/23_process_substitution

bash: 支持进程替换
dash: 不支持, 替代方法, 通过临时文件中转

1.3.10. 字符串比较

[ string1 = string2 ] 和 [ string1 == string2 ]
bash: 支持两者
dash: 只支持=

1.3.11. 加强版test

bash: 支持[[ ]], 可实现正则匹配等强大功能
dash: 不支持[[ ]], 替代方法,采用外部命令

1.3.12. for循环

for (( expr1 ; expr2 ; expr3 )) ; do list ; done

bash: 支持C语言格式的for循环
dash: 不支持该格式的for, 替代方法,用while+((expression))实现

1.3.13. let命令和

bash: 有内置命令let,也支持((expression))方式
dash: 不支持,替代方法,采用((expression))

1.3.14. 自增自减

$((expression))
bash: 支持id++,id–,++id,–id这样到表达式
dash: 不支持++,–, 替代方法:id+=1,id-=1, id=id+1,id=id-1

1.3.15. 其它

bash: 支持 echo -e, 支持 declare
dash: 不支持。

1.4. 参考

【Linux基础】dash和bash简介 Dash(Debian Almquist Shell)和 Bash(Bourne Again Shell)是 Unix/Linux 系统中的命令行 shell,用于执行命令、管理文件系统、编写脚本等任务的工具。 阅读详情

相关推荐

bash与sh脚本的区别:从符号链接到语法差异的全面解析

Shell脚本是Linux系统自动化运维的基础,而bash和sh则是其中最常见的两种解释器。很多人误以为sh只是bash的简称,实际上/bin/sh在不同发行版中可能指向dash或bash等不同程序,这导致同一脚本在不同环境下表现迥异。bash作为sh的超集,支持数组、[[ ]]、正则匹配等扩展特性,但严格遵循POSIX的sh并不识别这些语法。若用sh命令强行解析bash脚本,常会引发Syntax error等故障。了解符号链接的指向、掌握sh -n语法检查的用法,并根据场景选择合适的解释器,是保障脚本可移

weixin_32175665的博客 254

Linux系统轻量级监控工具linux-dash的安装方法

Linux系统轻量级监控工具linux-dash的安装方法

jks212454的博客 3829

Ubuntu的Bash和Dash之间的区别(嵌入式)

Bash和Dash是两个常见的Shell解释器,它们在Ubuntu中有不同的用途。无论选择是Bash还是Dash,确保脚本在不同的Shell解释器中都能正常运行是很重要的。Dash是一个更小、更轻量级的Shell解释器,它是Bourne Shell的替代品。在嵌入式系统中,Ubuntu是一个常用的操作系统,而Bash和Dash是两个常见的Shell解释器。然而,如果脚本使用了Bash的高级特性,例如特定的命令补全或语法扩展,可能需要进行相应的修改才能在Dash中正常运行。

CodeSageX的博客 1027

sh、bash 和 dash 几种 shell 的区别是什么?

在调试基于 Debian 的 Docker 镜像时,进入容器后在终端中按上箭头键后终端显示^[[A,下箭头显示^[[B,右箭头显示^[[C,左箭头显示^[[D,按删除键也是显示了几个特殊字符。很奇怪,仔细看了一下,原来进入容器的时候终端使用的 sh,切换为 bash 就好了(在终端输入 bash 命令就可以切换为 bash 了)。sh 和 bash 都是常见的Unix shell,其实还有另外一个是 dash,接下来看下三者的联系和区别。

路多辛的所思所想 3693

shell从入门到精通(0)认识各种shell--sh、bash、dash、csh

shell是一个命令行解释器,或者说shell给类unix系统提供了命令行用户界面。shell既是交互性命令语言,同时也是脚本语言。 第一个unix shell是Thompson shell,是由贝尔实验室的Ken Thompson写的,伴随着unix版本1-6发布。 Thompson shell是基于Multics shell开发的(1965),当然Multics shell也有前身,就不深究了。 Bourne Shell由 Stephen Bourne 在贝尔实验室工作期间开发,它的开发是做为 Thom

二进制君 1416

山东大学FPGA课程实验一 加法器设计

电子设计自动化与FPGA设计,实验一 加法器设计

2503_91283667的博客 869

linux———/bin/sh、 /bin/bash、 /bin/dash的区别

bash bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)。Bourne shell是一个早期的重要shell,由史蒂夫·伯恩在1978年前后编写,并同Version 7 Unix一起发布。bash则在1987年由布莱恩·...

夜风的博客 10万+

ArcMap实战:用栅格计算器搞定16年NDVI趋势分析,附完整F检验流程

本文详细介绍了如何使用ArcMap的栅格计算器进行16年NDVI趋势分析,包括数据预处理、线性趋势计算和F显著性检验的全流程操作。通过实际案例和统计原理解析,帮助GIS从业者掌握植被覆盖变化的分析方法,特别适合生态评估和农业监测应用。

weixin_29251567的博客 252

Linux之shell以及bash、dash的详解

Linux之shell、sh、bash、dash详解 首先,我们先借用两张图来简单概括一下Linux系统的结构: 好的,下面我们来分别来解释其中的一些概念和作用: Shell与Shell script 何为linux的shell? 人们总是形象的把Linux系统比作一个“蛋”,那么组成的硬件(Hardware)就好比是这个蛋的蛋核(蛋黄); Linux-Kern...

i-kernel 3万+

雷达信号处理——恒虚警检测(CFAR)

上图展示的是同时在距离维和多普勒维进行恒虚警检测的原理,如果只是在距离维或多普勒维做CFAR,检测单元的左右两侧均有设定好数量的保护单元和参考单元。不同的CFAR检测器适用于不同的场景,CA-CFAR算法适用于均匀环境中的单目标或彼此相距较远的多目标环境,在邻近多目标环境会发生目标的遮蔽效应,在杂波边缘会发生杂波边缘效应。从图中也可以看到,根据阈值的选择不同,有不同的检测器,其中CA-CFAR是取的参考单元的均值,SO-CFAR取的是参考单元的最小值,而GO-CFAR是取的参考单元的最大值。

诚朴勇毅 3万+

秦时明月6.2魔改版_从零到一部署指南_含安卓客户端配置与GM后台直通

本文详细介绍了秦时明月6.2魔改版的从零到一部署指南,包括环境准备、服务端安装、安卓客户端配置以及GM后台直通等关键步骤。特别针对安卓客户端配置和GM工具使用提供了实用技巧,帮助用户快速搭建并优化游戏服务器,确保稳定运行。

weixin_42522964的博客 317

linux中的sh、dash、bash的区别

文章目录1.常见shell类型2.规范和建议3.bash和dash区别 1.常见shell类型 Bourne shell (sh) UNIX 最初使用,且在每种 UNIX 上都可以使用。在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。 C shell (csh) csh, the C shell, is a command interpreter wi...

喜欢打篮球的普通人 1447

微信小程序 - 最新图片组拖拽排序更换位置功能,类似微信朋友圈九宫格图片的拖动排序效果,微信小程序实现九宫格图片拖拽调换位置,小程序详细实现图像拖曳拖动切换位置排序功能(详细示例代码,一键复制开箱即用

微信小程序,wechat,小程序,图片排序,图像排序,九宫格拖拽排序,拖曳,拖动,拖拽,仿微信朋友圈,朋友圈宫格图片排序,微信朋友圈图片拖动排序效果,实现九宫格图片拖拽,图像拖拽排序组件插件,小程序实现拖拽图片切换图片位置,图片拖动互换位置,图像拖拽切换位置,九宫格图片组合拖动排序,交换九宫格图片的位置,小程序上传图片后,如何实现拖拽排序功能,小程序怎么实现图片拖拽排序,微信小程序图片上传,九宫格拖拽组件,选择图片并拖动_微信小程序图片拖拽,微信小程序长按拖拽排序,图像的拖拽移动,多图拖拽排序功能,实现九宫

✅ 精选推荐文章 4454

shell编程系列- bash和sh的区别

在shell编程中 #!/bin/sh 和 #!/bin/bash 的区别

俞兆鹏的博客 6864

RK3588 平台imx334 驱动调试记录

rk3588调试imx334

xiaoning132的专栏 1790

Windows 11 WSL2环境下OpenClaw部署的兼容性问题分析与解决方案研究

本文研究了OpenClaw在Windows 11 WSL2环境下的部署方案。WSL2通过无缝集成Linux与Windows系统,为OpenClaw提供了良好的运行环境,支持GPU加速和跨平台开发。文章详细分析了硬件配置要求(推荐8核CPU/16GB内存/NVMe SSD)、系统选择(Windows 11 Pro+Ubuntu 22.04)以及部署步骤,包括WSL2启用、Linux发行版安装、Python/Node.js/Redis等依赖配置。通过优化.wslconfig文件参数(如内存分

博客 2281

linux的dash与bash,linux中的sh、dash、bash的区别

一、常见shell类型1.Bourne shell (sh)UNIX 最初使用,且在每种 UNIX 上都可以使用。在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。2. C shell (csh)csh, the C shell, is a command interpreter with a syntax similar to the C programmi...

weixin_27374911的博客 537

【CAD二次开发】炸开所有的嵌套块

代码】【CAD二次开发】炸开所有的嵌套块。

1515

Shell 解释器​​ bash 和 dash 区别

bash和dash都是 Unix/Linux 系统中的 ​​,但它们在功能、语法和性能上有显著区别。

scoone的博客 1405

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

探索 Shell:选择适合你的命令行利器 bash, zsh, fish, dash, sh...

Shell 是用户与操作系统内核之间的桥梁,负责接收用户输入的命令,解析并传递给系统执行。在 Linux 和 BSD 系统中,Shell 通常以命令行界面的形式呈现,但它远不止于此。Shell 是一个强大的脚本语言环境,可以通过编写脚本自动化复杂任务,处理文件、数据流以及系统资源。许多新用户对 Linux 的第一印象是“必须使用终端,输入复杂命令”,甚至觉得它不够友好。然而,这种看法并不完全准确。现代 Linux 发行版提供了图形化界面(GUI),用户完全可以仅通过鼠标操作。

vortex5的博客 1794

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Ubuntu切换默认sh为bash或者dash

Ubuntu切换默认sh为bash或者dash

qq_44925149的博客 2621

【Linux】/bin/bash和/bin/sh的区别

几种shell Linux中的shell有多种类型; 其中最常用的几种是Bourne shell (sh)、C shell (csh) 和Korn shell (ksh),三者各有优缺点。 Bourne shell是UNIX最初使用的shell,并且在每种UNIX上都可以使用。Bourneshell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。 Li...

qq_34018840的博客 3933

Linux下sh与bash的区别

在学习shell脚本的过程中发现一个问题,使用./与sh 执行脚本的结果不同,如下: #!/bin/bash read -p "please input: " tmp echo ${tmp} [ "${tmp}" == "Y" ] || [ "${t...

ThorKing01的博客 3887

bash sh为什么终端不能tab补全

摘要 本文解答了关于Linux终端中Shell环境的问题,主要涉及sh和bash的区别、查看当前Shell的方法以及相关原理。 Tab键失效问题:当终端提示符为$时,说明处于sh环境,不支持Tab补全。解决方法:输入bash切换到bash环境,或永久修改默认Shell为bash。 sh与bash的区别: sh是基础Shell,功能简单,不支持Tab补全和历史命令。 bash是增强版,支持智能补全、历史记录等功能。 原理差异在于bash使用了libreadline库,而sh没有。 查看当前Shell: 输入e

qq_46506007的博客 1150
上一篇: 串口扫盲TTL,TX/TR/GND
下一篇: OHOS(HarmonyOS) 编译 C/C++ 库
knowledgebao
博客等级 码龄15年 401粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值