dash-bash区别

用sh执行脚本*.sh文件,其中文件*.sh中包含declare的变量声明,但这样却现实not found declare,用chmod 755 *.sh,然后./*.sh脚本运行正常,或者直接bash *.sh也能运行,这是因为sh是链接的是dash,不是bash。
Ubuntu安装的时候使用了dash,dash比bash体积小速度快,兼容性高!但是在bash下可以正常运行的一些sh在dash下不能使用,造成了一些麻烦。为了解决之,键入sudo dpkg-reconfigure dash,重新配置dash,并选择"no",即不使用dash。

<think>嗯,用户想了解-bash和shell的区别,看来用户对Linux系统的命令行环境有基本认知但在术语层面存在混淆。从用户提问方式看,ta注意到终端提示符常显示"-bash",但又不确定它和普通shell的关系。先整理引用资料的关键点:1/2/3号引用共同指出bash是众多shell的一种,sh是历史悠久的Bourneshell简称;4号引用强调shell本质是应用程序;5号引用则解释了/bin/sh可能指向bashdash的实践差异。这些信息都指向同个核心:shell是抽象概念,bash是具体实现。用户混淆点可能在"bash"和"-bash"的符号差异。实际上"-bash"的前缀短横线表示这是loginshell,即用户登录时启动的第一个交互式shell,会加载更多配置文件。这点需要明确解释,因为普通shell脚本开头的"#!/bin/bash"并不带短横线。需要特别澄清术语层级:-顶层概念:Shell(外壳程序总称)├─具体实现:bash(主流增强版)├─sh(原始标准,现多为符号链接)├─dash(轻量替代)└─其他(zsh/csh等)还要解释loginshell的触发场景(ssh登录、su-切换)与non-loginshell(终端新建标签)的行为差异,包括配置文件加载顺序(/etc/profile→~/.bash_profilevs.~/.bashrc)。注意到用户之前接触过类似"快速排序"的技术概念解析,可能倾向结构化表达。准备用表格对比维度和嵌套列表展示从属关系,同时强调-bash的身份标识意义(前置短横线作为技术标记而非名称组成部分)。最后延伸触达实践建议:何时用#!/bin/bash,何时用#!/bin/sh,这对用户实际编写脚本有直接帮助。顺带提下Ubuntu默认dash的有趣现象,避免用户将来遇到/bin/sh执行速度差异时困惑。</think> 在Linux系统中理解`-bash`与`shell`的区别,需厘清以下概念: --- ### **一、核心概念** 1. **Shell(外壳程序)** - 是用户与操作系统内核(Kernel)交互的**命令行解释器**,本质是应用程序(如QQ、Firefox)[^4] - 类型多样:`sh`(Bourne Shell)、`bash`(Bourne-Again Shell)、`csh`、`ksh`、`dash`等[^1][^3] 2. **Bash(Bourne-Again Shell)** - `sh`的增强版,Linux默认Shell(如终端打开通常启动bash)[^1][^5] - 支持更多功能:命令历史、自动补全、脚本扩展语法等 3. **`-bash`的特殊含义** - 连字符`-`表示这是**Login Shell**(登录Shell) - 触发时会加载登录配置(如`/etc/profile`、`~/.bash_profile`) - 典型场景:通过SSH登录或执行`su - username`时出现[^5] --- ### **二、关键区别** | **维度** | **Shell** | **Bash** | **`-bash`** | |----------------|-------------------------------|-------------------------------|-----------------------------| | **本质** | 命令行解释器**总称** | Shell的**具体实现** | Bash作为**Login Shell**的身份标识 | | **定位** | 抽象概念(接口层) | 具体Shell程序 | Bash的**运行模式** | | **功能范围** | 泛指所有Shell类型 | 支持`sh`语法+额外扩展功能 | 同Bash,但加载配置不同 | | **启动场景** | 所有命令行操作环境 | 终端默认启动/Terminal | SSH登录、`su -`切换用户 | --- ### **三、典型场景解析** 1. **`#!/bin/bash` vs `#!/bin/sh`** - `#!/bin/bash`:明确使用Bash解释器(支持高级语法) - `#!/bin/sh`:可能指向`bash`或`dash`(轻量Shell,如Ubuntu默认)[^2][^5] ```bash # 检查sh的实际指向 $ ls -l /bin/sh lrwxrwxrwx 1 root root 4 Apr 5 2023 /bin/sh -> dash* ``` 2. **配置加载差异** - **Login Shell (`-bash`)**:加载 `~/.bash_profile` → `~/.bashrc` - **Non-Login Shell (`bash`)**:仅加载 `~/.bashrc` > 登录时初始化环境变量应写在`.bash_profile`,通用设置放在`.bashrc`。 3. **功能兼容性** - `bash`支持`sh`的所有语法,但反向不成立(如数组操作`${arr[@]}`仅bash支持) - 脚本若需跨平台,建议用`#!/bin/sh`以符合POSIX标准[^5] --- ### **四、总结** - **Shell**是通用术语,**Bash**是其主流实现,**`-bash`** 特指以登录模式运行的Bash- 选择解释器时: - 需高级功能 → 用 `#!/bin/bash` - 追求轻量/兼容性 → 用 `#!/bin/sh`(注意实际指向) - `-bash`的核心价值在于初始化登录环境,与普通`bash`的配置加载机制不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值